Ala*_*ALI 3 compilation typescript
我正在使用TS Playground来学习 TypeScript。我发现奇怪的是 TypeScript 不会为接口生成特定的代码。
例子:
interface Person {
id: number,
fullName: string,
sayHello: Function
}
let p: Person;
p.id = 123;
p.fullName = 'John Doe';
p.sayHello = function () {return "Hello from " + p.fullName;}
Run Code Online (Sandbox Code Playgroud)
将被翻译为:
var p;
p.id = 123;
p.fullName = 'John Doe';
p.sayHello = function () { return "Hello from " + p.fullName; };
Run Code Online (Sandbox Code Playgroud)
有没有解释为什么 TypeScript 不生成任何代码interface?
TypeScript 编译器执行一项称为类型擦除的任务,该任务从输出中删除所有类型(请参阅下面的注释)。造成这种情况的主要原因有两个:
有一些项目打算将 TypeScript 的类型引入运行时,以执行运行时类型检查,但老实说,人们对此并没有太大兴趣。鉴于我们始终从完全动态类型转向设计/编译时静态类型检查,对于大多数人来说,这一飞跃可能已经足够大了。
类型并不是编译过程中唯一可以删除的东西;另一个示例是未初始化的类成员,例如name下面示例中的属性,您在 JavaScript 文件中找不到它。
class Example {
public name: string;
}
const example = new Example();
console.log(example.name);
Run Code Online (Sandbox Code Playgroud)
但应用程序中的大部分删除都是类型和环境声明。
所有类型都被删除?对于发出与反射一起使用的类型信息有一些实验性支持,您可以使用Reflect-metadata包进行尝试。
| 归档时间: |
|
| 查看次数: |
1773 次 |
| 最近记录: |