【发布时间】:2018-03-22 22:16:29
【问题描述】:
所以我正在尝试定义一个可以具有相同类型的嵌套属性的类型/接口。我的代码:
type TMessagesFormat = { [key: string]: string };
interface TMessages {
messages: TMessagesFormat;
}
interface TGroupMessages {
messages?: TMessagesFormat;
controls: { [key: string]: TMessages | TGroupMessages }
}
let groupMessages: TGroupMessages = {
controls: {
username: { messages: {required: 'Username required'} }
}
}
let messages: TGroupMessages = {
controls: {
username: { messages: { required: 'Username required' } },
passwordGroup: {
messages: { nomatch: 'Passwords doesn\'t match' },
controls: {
password: { messages: { required: 'Password required' } }
}
}
}
};
类型检查适用于用户名和密码组,但例如密码组中的控件可以是任何东西,并且 TS 编译器不会抱怨。事实上,如果我将 controls: 'whatever' 属性(字符串不应该是有效类型)放在 username 对象字面量中,代码仍然可以编译而没有任何警告或错误。这可能吗?如何?谢谢!
【问题讨论】:
-
猜猜有一个隐式类型断言。让 x :TMessages = { 消息:{必需:''},控件:1 }; // 抛出错误 let y = { messages: {required: ''}, controls: 1 } as TMessages; // 效果很好
标签: typescript