angularjs - Tipurile proprietății 'length' sunt incompatibile. Tipul '4' nu poate fi atribuit tipului '1'
Învăț TypeScript/Angular în acest moment și nu pot înțelege de ce TSLint aruncă acest lucru ca o eroare, totuși codul în sine funcționează și se afișează într-un browser.
export class GreetingComponent implements OnInit {
names: [{ name: string }] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];
constructor() { }
ngOnInit() {
}
În mod specific linia:
names: [{ name: string }] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];
Eroare completă:
[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;
}]
Răspuns #1
Tipul:
[{name: string}]
este un tip de tuplă cu un singur element. Deci, acel tip poate fi doar un array cu un singur element în el. Dacă vrei ca tipul să fie un array de orice lungime umplut cu acele obiecte, ar fi scris ca
{name: string}[]
// Or if you prefer:
Array<{name: string}>
Răspunsul #2
În cazul acesta:
names: [{ name: string }] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];
Ar trebui să scrii asta:
names: { name: string }[] = [{ name: 'Tom' }, { name: 'Dave' }, { name: 'Katie' }, { name: 'John' }];
Și pentru a doua versiune a codului va funcționa bine.
