在打字稿中,以下编译。
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();
除了:
类型employee不能分配给Person,属性姓氏 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;
答案 0 :(得分:4)
有效地,Typescript根据对象的形状来确定对象的类型。 - 如果两个类具有相同的成员并且它们的类型和可访问性匹配,则它们被称为兼容并且可以互换使用。功能也是如此。正如评论中提到的t.niese
一样,您可以在the TypeScript handbook中找到有关此背后的推理及其含义的更多信息。它基本上源于JavaScript大量使用匿名函数和对象这一事实,因此使用更严格的类型系统可能会使得在TypeScript中使用现有的JS库成为一项尴尬的任务。