![](/img/trans.png)
[英]Angular: Typescript: Uncaught TypeError: Cannot set property 'autoTable' of undefined
[英]Typescript Inerfaces Uncaught TypeError: Cannot set property
我正在嘗試向對象添加類型聲明,在為嵌套對象分配值時遇到TypeError。
這是片段
interface Person {
age: number;
name: string;
study: {
schoolName: string
}
}
let john = {} as Person;
john.age = 25;
john.name = 'John';
john.study.schoolName = 'some school';
console.log(john); // Uncaught TypeError: Cannot set property 'schoolName' of undefined
Typescript游樂場鏈接
也許查看您的代碼段的編譯版本會為您清除它
var john = {};
john.age = 25;
john.name = 'John';
john.study.schoolName = 'some school';
console.log(john);
如您所見,Typescript實際上並不初始化學習屬性。
因為接口實際上並不“創建”您的對象。 在您的代碼中,開始分配值之前,john只是一個空對象。 您可以為其分配屬性(年齡,姓名等),因為這很正常。 您試圖將一個屬性分配給一個不存在的對象屬性。 使用類並使用構造函數對其進行初始化。 或具有從該“接口”正確創建對象的函數。
基本上,接口只是打字稿中的奇特事物,可以防止開發人員輸入錯誤。 它不會在后台創建任何東西。
Typescript只會告訴您的IDE此新對象的類型。 它不會為您創建完整的對象。
這是您要如何創建對象的方法:
interface Person {
age: number;
name: string;
study: {
schoolName: string
}
}
let john = {} as Person;
john.age = 25;
john.name = 'John';
john.study = {
schoolName: 'some school'
};
console.log(john);
或者,您可以直接執行以下操作:
let john: Person = {
age: 25;
name: 'John';
study: {
schoolName: 'some school'
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.