在结构化对象中强制类型
Enforce type in structured object
我们如何强制结构化对象中的属性类型?
在下面的代码中,我想避免在创建数组之前定义所有数组元素(第二个示例)。
type EcommerceFlow = ("REVENUE" | "ATC" | "ADD_INSURANCE" );
interface UniversalConf {
trackingId: string;
eCommerceFlows: Array<EcommerceFlow>;
}
// how to keep this syntax (single object declaration) with compiler checks?
const providers = [
<UniversalConf> {
"providerCode": "UA", // Compiler does not complain about non-defined property
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"] // Compiler does not complain about BAD_FLOW
}
]
const uaConf:UniversalConf = {
"providerCode": "UA", // Compiler complains about non-defined property
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"] // Compiler complains about BAD_FLOW (and this is fine)
};
const providers2 = [ uaConf ];
类型<UniversalConf>
在
const providers = [
<UniversalConf> {
"providerCode": "UA", // Compiler does not complain about non-defined property
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"] // Compiler does not complain about BAD_FLOW
}
]
是一个assertion;它 抑制 类型检查,告诉编译器 "I know what this is"。相反,您想告诉编译器您希望标识符的类型是什么,并让它检查值:
const providers: UniversalConf[] = [
{
"providerCode": "UA",
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"]
}
]
如果您有一个可以包含多种可能类型的数组,您可以使用 union type 来表示它:
const providers: (UniversalConf | ...)[] = [
{
"providerCode": "UA",
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"]
}
]
我们如何强制结构化对象中的属性类型? 在下面的代码中,我想避免在创建数组之前定义所有数组元素(第二个示例)。
type EcommerceFlow = ("REVENUE" | "ATC" | "ADD_INSURANCE" );
interface UniversalConf {
trackingId: string;
eCommerceFlows: Array<EcommerceFlow>;
}
// how to keep this syntax (single object declaration) with compiler checks?
const providers = [
<UniversalConf> {
"providerCode": "UA", // Compiler does not complain about non-defined property
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"] // Compiler does not complain about BAD_FLOW
}
]
const uaConf:UniversalConf = {
"providerCode": "UA", // Compiler complains about non-defined property
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"] // Compiler complains about BAD_FLOW (and this is fine)
};
const providers2 = [ uaConf ];
类型<UniversalConf>
在
const providers = [
<UniversalConf> {
"providerCode": "UA", // Compiler does not complain about non-defined property
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"] // Compiler does not complain about BAD_FLOW
}
]
是一个assertion;它 抑制 类型检查,告诉编译器 "I know what this is"。相反,您想告诉编译器您希望标识符的类型是什么,并让它检查值:
const providers: UniversalConf[] = [
{
"providerCode": "UA",
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"]
}
]
如果您有一个可以包含多种可能类型的数组,您可以使用 union type 来表示它:
const providers: (UniversalConf | ...)[] = [
{
"providerCode": "UA",
"trackingId": "XXXXXXXXXX",
"eCommerceFlows": ["REVENUE", "BAD_FLOW"]
}
]