型の選択

DataWeave ​​でドットセレクター (​.​) を使用すると、既存の型から新しい型を宣言できます。​モジュールローダー​と組み合わせることで、DataWeave はカスタムモジュールファイルから宣言を読み込み、他の DataWeave モジュールの型と同じようにアクセスできる DataWeave 型ディレクティブに変換することもできます。

既存の型からの新しい型の宣言

次の例では、​User​ 型から ​NameType​ を宣言します。​User.name​ の形式でドットセレクターを使用して ​name​ 変数を ​NameType​ として宣言することで、​typeOf()​ 関数でプリミティブ型 ​"String"​ を返すことができます。DataWeave 変数​name​ は、​NameType​ 値 "Seba" として宣言されます。

DataWeave スクリプト:
%dw 2.0
type User = {name: String}
type NameType = User.name
var name: NameType = "Seba"
---
typeOf(name)
出力:
"String"

既存の型の項目からの型の作成

次の例では、ドットセレクター (​.​) を使用して、複雑な型 ​User​ の 1 つのキーから新しい型 ​Address​ を宣言します。

DataWeave スクリプト:
%dw 2.0
output application/json
type User = {
 address : {country: String, city: String, street: String, number: Number},
 userName : String
}
type Address = User.address

var userAddress: Address = {country: "Argentina", city: "Rosario", street: "Calle Falsa", number: 123}
---
userAddress
出力:
{
 "country": "Argentina",
 "city": "Rosario",
 "street": "Calle Falsa",
 "number": 123
}

結合型からの型の選択

次の例は、​Object​ 型で構成される ​Union​ 型を使用して型を選択する方法を示しています。

DataWeave スクリプト:
%dw 2.0
output application/json
type ID = {id: String, firstName: String, age: Number} | {id: Number, firstName: String, secondName: String}

var nameAge: ID = {firstName: "Seba", id: "123", age: 28}
var fullName: ID = {id: 38123, firstName: "Seba", secondName: "Elizalde"}

var nameString: ID.firstName = "Seba"
var idNumber: ID.id = 38123
---
[nameAge, fullName, nameString ++ " is of type " ++ typeOf(nameString), idNumber ++ " is of type " ++ typeOf(idNumber)]
出力:
[
  {
    "name": "Seba"
  },
  {
    "id": 38123
  },
  "Seba is of type String",
  "38123 is of type Number"
]

次のスクリプトは、2 番目の型が ​Object​ 型ではなく、セレクターで参照する方法がないため、失敗します。

DataWeave スクリプト:
%dw 2.0
output application/json
type UnionType = {name: String} | Number
type Fail = UnionType.name
---
{}
出力:
Cannot do selection on Type: Number

4| type Fail = UnionType.name

名前空間からの型の選択

次の例は、名前空間の型の選択を示しています。

DataWeave スクリプト:
%dw 2.0
output application/json
ns ns1 http://acme.com
type User = {
 ns1#name : String,
 name : Number,
}
var nameString: User.ns1#name = "Seba"
var nameNumber: User.name = 123
---
{
   "NameString" : typeOf(nameString),
   "NameNumber" : typeOf(nameNumber)
}
出力:
{
 "NameString": "String",
 "NameNumber": "Number"
}

型パラメーターを使用した型の選択

次の例は、他のプログラミング言語の汎用型に似ている型パラメーターでどのように型が選択されるのかを示しています。

DataWeave スクリプト:
%dw 2.0
output application/json
type WithParameters<A, B> = {first: A, second: B, nestedObject: {message: A}}
---
{
 a: true is WithParameters<Boolean, Number>.first,
 b: 4592 is WithParameters<String, Number>.second,
 c: "sdf" is WithParameters<String, Number>.nestedObject.message,
}
出力:
{
  "a": true,
  "b": true,
  "c": true
}

型のメタデータの保持

次の例は、型の選択で型に関連付けられたメタデータが保持されることを示しています。

DataWeave スクリプト:
%dw 2.0
output application/json
type User = {
 birthDate: Date {format: "dd-MMM-yy"},
 userName : String {schema: "value"}
}
type FormattedDate = User.birthDate
type UserName = User.userName
var formattedDate: FormattedDate = "10-SEP-15" as Date {format: "dd-MMM-yy"}
var otherFormatDate = "23-10-2022" as Date {format: "dd-MM-yyyy"}
var userName = "Messi" as String {schema: "value"}
var otherUserName = "Di María" as String {schema: "otherValue"}
---
{
formattedDate: formattedDate is FormattedDate,
userName: userName is UserName,
otherFormatDate: otherFormatDate is FormattedDate,
otherUserName: otherUserName is UserName
}
出力:
{
 "formattedDate": true,
 "userName": true,
 "otherFormatDate": false,
 "otherUserName": false
}