TypeScript为什么允许以下内容?
interface SubType {
key: keyof MyType
}
interface MyType {
a: string
b: string
}
const container: SubType = { key: 'a' }
const test: Partial<MyType> = {
[container.key]: 3
}
当key
实际上不是MyType
的键时,它会正确地抱怨,但是即使MyType
仅具有{ string
个值。
答案 0 :(得分:0)
如果计算出的属性名称的类型不是单例(此处container.key
的类型为"a" | "b"
),则TypeScript不够聪明,根本无法验证该值。请参见src/compiler/checker.ts
中的checkObjectLiteral
函数。请注意,如果注释掉b: string
的{{1}}成员,以使MyType
的类型变为container.key
,则会出现预期的错误。 this issue report中有更多信息。