属性“长度”的类型是不兼容的。类型“4”不能分配给“1”类型

时间:2018-03-29 19:18:49

标签: angularjs typescript

我现在正在学习打字稿/角度,并且无法理解为什么TSLint会将此作为错误抛出,但代码本身可以在浏览器中运行并显示。

export class GreetingComponent implements OnInit {

  names: [{ name: string }] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];
  constructor() { }

  ngOnInit() {
  }

特别是这一行:

 names: [{ name: string }] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];

完全错误:

[ts]
Type '[{ name: string; }, { name: string; }, { name: string; }, { name: string; }]' is not assignable to type '[{ name: string; }]'.
  Types of property 'length' are incompatible.
    Type '4' is not assignable to type '1'.
(property) GreetingComponent.names: [{
        name: string;
    }]

2 个答案:

答案 0 :(得分:21)

类型:

[{name: string}]

是一个元素的tuple type。所以该类型只能是一个包含单个项目的数组。如果您希望类型为填充了这些对象的任何长度的数组,则将其写为

{name: string}[]

// Or if you prefer:

Array<{name: string}>

答案 1 :(得分:0)

在这种情况下:

names: [{ name: string }] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];

您应该这样写:

names: { name: string }[] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];

对于第二个版本的代码,它将运行良好。