Flex Gateway新着情報
Governance新着情報
Monitoring API Manager次の例では、User
型から NameType
を宣言します。User.name
の形式でドットセレクターを使用して name
変数を NameType
として宣言することで、typeOf()
関数でプリミティブ型 "String"
を返すことができます。DataWeave 変数name
は、NameType
値 "Seba" として宣言されます。
%dw 2.0
type User = {name: String}
type NameType = User.name
var name: NameType = "Seba"
---
typeOf(name)
"String"
次の例では、ドットセレクター (.
) を使用して、複雑な型 User
の 1 つのキーから新しい型 Address
を宣言します。
%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
型を使用して型を選択する方法を示しています。
%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
型ではなく、セレクターで参照する方法がないため、失敗します。
%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
次の例は、名前空間の型の選択を示しています。
%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"
}
次の例は、他のプログラミング言語の汎用型に似ている型パラメーターでどのように型が選択されるのかを示しています。
%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
}
次の例は、型の選択で型に関連付けられたメタデータが保持されることを示しています。
%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
}