簡體   English   中英

Typescript接口未捕獲TypeError:無法設置屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM