为什么TypeScript不抱怨带有计算键的Partial类型中的值不正确?

时间:2018-08-05 06:28:30

标签: typescript

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个值。

Link to TS playrground

1 个答案:

答案 0 :(得分:0)

如果计算出的属性名称的类型不是单例(此处container.key的类型为"a" | "b"),则TypeScript不够聪明,根本无法验证该值。请参见src/compiler/checker.ts中的checkObjectLiteral函数。请注意,如果注释掉b: string的{​​{1}}成员,以使MyType的类型变为container.key,则会出现预期的错误。 this issue report中有更多信息。