Типы собственности "длина" несовместимы. Тип '4' нельзя присвоить типу '1'

В данный момент я изучаю машинописный текст / 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;
    }]
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
15
0
11 971
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Тип:

[{name: string}]

представляет собой тип кортежа одного элемента. Таким образом, этот тип может быть только массивом с одним элементом в нем. Если вы хотите, чтобы типом был массив любой длины, заполненный этими объектами, он будет записан как

{name: string}[]

// Or if you prefer:

Array<{name: string}>

Ах прекрасно. Это изменилось? Этого нет в моем руководстве, которому я следую, то же самое касается добавления const '' 'export const PEOPLE [] = [{name:' Tom '}, {name:' Dave '}, {name:' Katie '}, {name: 'John'}]; '' '

MissCoder87 29.03.2018 21:45

В моем случае в аналогичной проблеме сработала только вторая версия (Array <Object>). В первой версии (Object []) мой массив все еще интерпретировался как кортеж. Хотя мне непонятно, почему.

Gefilte Fish 09.10.2018 15:02

Во всем виноват Свифт.

Amr ElAdawy 10.12.2018 06:21

В этом случае:

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

Вы должны написать это:

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

И для второй версии кода это будет хорошо.

Другие вопросы по теме