禁止在TypeScript中使用大括号创建类对象

时间:2018-09-26 03:13:10

标签: typescript

分配给带有{a:1,b:2}这样的大括号的类变量不会导致编译错误。

@MyDecorator()
class Foo {
    public a: number = 0;
}

const foo1: Foo = { a: 1 }; // No Error

但是foo1没有装饰,因为它不是用构造函数创建的。 我想强制使用新的ClassName()创建对象。

如何禁止使用{...}创建实例?

1 个答案:

答案 0 :(得分:3)

Typescript使用结构化类型来确定类型之间的兼容性。如果您的类仅包含字段a,则具有该字段的对象文字将与该类兼容。

确保您的类与对象文字不兼容的最简单方法是添加私有字段,即使您不使用它也是如此。

class Foo {
    public a: number = 0;
    private no:undefined;
}

const foo1: Foo = { a: 1 } //error