TypeScript和类型别名

时间:2017-04-26 14:26:57

标签: javascript typescript

据我所知,TypeScript允许为任何类型创建别名。如:

type MyNum = number;
var y: MyNum;
y = 33; // it's ok

但是后续代码无效:

type MyType = Object;
const dt = new MyType(); // here is an error: 'MyType only refers to a type, but is being used as a value here'

我错在哪里,如何创建MyType实例?

1 个答案:

答案 0 :(得分:7)

类型别名仅用于编译时,它们不会被转换为已编译的javascript代码。

您的第一个代码编译为:

var y;
y = 33;

如你所见,这里没有关于MyNum的内容。

但是,在您的第二个代码段中,您尝试将MyType用作值而不仅仅是一种类型。
编译器不允许这样做,因为在运行时MyType不存在,因为它编译为:

var dt = new MyType();

类型别名,就像接口(和一般类型)仅用于编译一样,因此不能将它们用作值。

修改

要创建MyType的实例,在这种情况下:

const dt1: MyType = {};
const dt2: MyType = new Object();
const dt3: MyType = Object.create({});