在 typescript 中,编译以下内容。
class Person {
name : string;
}
class Employee {
name : string;
}
var person : Person = new Employee();
为什么会这样??这不会:
class Person {
name : string;
surname : string;
}
class Employee {
name : string;
}
var person : Person = new Employee();
除了:
Type employee is not assignable to type Person, the property surname is missing in type Employee
所以。类型在编译时使用属性名称进行比较??!
编辑:是的。这是来自 typescript 编译器的代码,用于检查。
for (var i = 0; i < targets.length; i++) {
var related = isRelatedTo(sources[i], targets[i], reportErrors);
if (!related) {
return 0;
}
result &= related;
}
return result;
最佳答案
实际上,Typescript 根据对象的“形状”确定对象的类型 - 如果两个类具有相同的成员并且它们的类型和可访问性匹配,则它们被认为是兼容的并且可以互换使用。功能也是如此。正如 t.niese
在他们的评论中提到的,您可以在 the TypeScript handbook 中找到有关其背后原因和含义的更多信息。 .它基本上源于 JavaScript 大量使用匿名函数和对象这一事实,因此拥有更严格的类型系统可能会使在 TypeScript 中使用现有的 JS 库成为一项尴尬的任务。
关于javascript - typescript 类型检查机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35433761/