javascript - typescript 类型检查机制

标签 javascript typescript

在 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/

相关文章:

显示站点 URL 的 Javascript 警报。如何从 javascript 警报顶部删除站点 url?

javascript - 哪些情况会导致IE8偶尔无法加载脚本?

javascript - sibling 之间的图像轻松交流

typescript - TypeScript 中的通用类转换

requirejs - TypeScript:仅包​​含语句的导入模块

angular - 使用 Angular2/Ionic2 标记输入

javascript - 无需重新加载且无需使用片段即可更改浏览器 URL 和页面内容

javascript - 将 angularjs 模块导出为 es6 模块

node.js - TypeScript @types 模块无法相互解析

javascript - 在 Angular 中动态更新 SVG