我正在使用 TS Playground学习 typescript 。我发现奇怪的是 TypeScript 不会为接口(interface)生成特定代码。
例子:
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;}
将被翻译成:
var p;
p.id = 123;
p.fullName = 'John Doe';
p.sayHello = function () { return "Hello from " + p.fullName; };
是否有解释为什么 TypeScript 不为 interface
生成任何代码?
最佳答案
TypeScript 编译器执行一项称为类型删除 的任务,该任务从输出中删除所有类型(请参阅下面的注释)。这有两个主要原因:
有一些项目打算将 TypeScript 的类型带到运行时,以执行运行时类型检查,但老实说,人们对此并不感兴趣。鉴于我们正在从始终完全动态的类型转变为在设计/编译时进行静态类型检查,这一飞跃对于大多数人来说可能已经足够大了。
类型并不是唯一可以在编译期间删除的东西;另一个示例是未初始化的类成员,例如下面示例中的 name
属性,您不会在 JavaScript 文件中找到它。
class Example {
public name: string;
}
const example = new Example();
console.log(example.name);
但您的应用程序中的大部分删除将是类型和环境声明。
所有类型都被删除?有一些实验支持发射类型信息与反射一起使用,您可以尝试使用 reflect-metadata包。
https://stackoverflow.com/questions/47350929/