typescript - TS2339: Egenskapen 'name' finns inte på typen 'object'
jag skriver ett objekt med TypeScript, koden är:
const obj2 ={name:1}
obj2.name = 2;
console.log(obj2.name)
const obj3:object = {name: "wewda"}
obj3.name = 'dadsa';
obj3['name'] = "cxzcxz"
console.log(typeof obj2)
console.log(obj3)
console.log(typeof obj3)
Jag fick ett fel på rad 5: error TS2339: Egenskapen 'name' finns inte på typen 'object'. men om jag istället använder obj3['name']="cxzcxz" fungerar det, kan någon förklara? tack
Svar #1
Titta på den här raden:
const obj3:object = {name: "wewda"};
Du har uttryckligen deklarerat att obj3 är av typen object, vilket effektivt bortser från all information om vilka egenskaper objektet kan innehålla. Typen object är förresten en typ som representerar icke-primitiva typer, alltså allt som inte är number, string, boolean, symbol, null eller undefined.
Så det finns inget sätt för typesystemet att verifiera att obj3.name är giltigt. Men om du kör med standardinställningarna för kompilatorn (som är ganska generösa) kommer obj3['name'] att tillåtas eftersom obj3 implicit kommer att kastas till any, även om det i princip är lika osäkert. Jag rekommenderar generellt att du aktiverar kompilatoralternativet --noImplicitAny för att skydda mot den här typen av osäkra åtkomster.
Observera också att detta är ett kompileringsfel i dina typdefinitioner, inte ett körfel. Med andra ord har värdet av obj3 fortfarande egenskapen name, men typen object har det inte.
