В данный момент я изучаю машинописный текст / 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;
}]


Тип:
[{name: string}]
представляет собой тип кортежа одного элемента. Таким образом, этот тип может быть только массивом с одним элементом в нем. Если вы хотите, чтобы типом был массив любой длины, заполненный этими объектами, он будет записан как
{name: string}[]
// Or if you prefer:
Array<{name: string}>
В моем случае в аналогичной проблеме сработала только вторая версия (Array <Object>). В первой версии (Object []) мой массив все еще интерпретировался как кортеж. Хотя мне непонятно, почему.
Во всем виноват Свифт.
В этом случае:
names: [{ name: string }] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];
Вы должны написать это:
names: { name: string }[] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];
И для второй версии кода это будет хорошо.
Ах прекрасно. Это изменилось? Этого нет в моем руководстве, которому я следую, то же самое касается добавления const '' 'export const PEOPLE [] = [{name:' Tom '}, {name:' Dave '}, {name:' Katie '}, {name: 'John'}]; '' '