打字稿类型检查机制

时间:2016-02-16 13:20:15

标签: javascript 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();

除了:

  

类型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;

1 个答案:

答案 0 :(得分:4)

有效地,Typescript根据对象的形状来确定对象的类型。 - 如果两个类具有相同的成员并且它们的类型和可访问性匹配,则它们被称为兼容并且可以互换使用。功能也是如此。正如评论中提到的t.niese一样,您可以在the TypeScript handbook中找到有关此背后的推理及其含义的更多信息。它基本上源于JavaScript大量使用匿名函数和对象这一事实,因此使用更严格的类型系统可能会使得在TypeScript中使用现有的JS库成为一项尴尬的任务。