【问题标题】:Types of property 'length' are incompatible. Type '4' is not assignable to type '1'属性“长度”的类型不兼容。类型“4”不可分配给类型“1”
【发布时间】:2018-09-08 20:30:05
【问题描述】:

我目前正在学习 typescript / angular,无法弄清楚为什么 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;
    }]

【问题讨论】:

    标签: angularjs typescript


    【解决方案1】:

    类型:

    [{name: string}]
    

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

    {name: string}[]
    
    // Or if you prefer:
    
    Array<{name: string}>
    

    【讨论】:

    • 啊完美。那改变了吗?它不在我的教程中,添加 const ''' export const PEOPLE [] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, {名称:'约翰'}];'''
    • 就我而言,在类似的问题中,只有第二个版本有效(Array)。在第一个版本(Object[])中,我的数组仍然被解释为一个元组。我不清楚为什么。
    • 都是斯威夫特的错。
    【解决方案2】:

    在这种情况下:

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

    你应该这样写:

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

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

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 2021-07-07
      • 2017-12-12
      • 2021-07-05
      • 2016-01-23
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多