Typescript编译器没有显示错误

时间:2016-08-22 12:16:00

标签: typescript

根据Typescript文档,当使用object literal时,它应该与接口完全匹配。但是对于以下代码,playground不会显示任何错误消息:

code pic from playground

这里prop是字符串,因此它与[index: number]: number冲突,这意味着索引应该是一个数字,该索引的值应该是一个数字,对于nameage以外的属性。

这是一个错误吗?如果我错了,请解释一下这是如何工作的?

2 个答案:

答案 0 :(得分:1)

您始终可以指定比界面要求更多的属性。作为演示,请查看此代码:(or on the playground

// index.ts
interface MyInterface {
  obligatoryProperty: string
  optionalProperty?: string
  [index: number]: number  
}

let impl1: MyInterface = {} // fails compilation
let impl2: MyInterface = { obligatoryProperty: 'hello' } // compiles fine
let impl3: MyInterface = {
  obligatoryProperty: 'hello',
  optionalProperty: 'hello',
  2: 2,
  3: 3,
  notSpecifiedPropertyThatIsAlsoNotANumber: 'hello',
} // Still fine

答案 1 :(得分:0)

因为他们决定做“隐式索引签名”,这是件好事!你可以在这里阅读原因:

https://github.com/Microsoft/TypeScript/issues/7059

如果您创建一个以number为键且非number为值的属性,TypeScript编译器将显示错误。 Here is an example in the playground.

旁注: TypeScript试图尽可能地解放。您可以省略函数签名中的参数。请参阅此example