Typescript 接口未捕获的 TypeError:无法设置属性
2019-02-10
79
我正在尝试向对象添加类型断言,在为嵌套对象分配值时遇到 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 游乐场的链接 链接
3个回答
也许看看 编译版本 的代码片段将为您清除它
var john = {};
john.age = 25;
john.name = 'John';
john.study.schoolName = 'some school';
console.log(john);
如您所见,Typescript 实际上并未初始化 study 属性。
3mard
2019-02-10
因为接口实际上并没有“创建”你的对象。 在你开始分配值之前,在你的代码中,john 只是一个空对象。你可以给它分配属性(年龄、姓名等),因为这是正常的。 你试图将一个属性分配给一个不存在的对象属性。要么使用类并使用构造函数初始化它。或者有一个函数可以正确地从该“接口”创建对象。
基本上,接口只是 TypeScript 中的一个花哨的东西,用来防止开发人员的拼写错误等。它不会在幕后创建任何东西。
Ales
2019-02-10
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'
}
};
Marvin Fischer
2019-02-10