分配给带有{a:1,b:2}这样的大括号的类变量不会导致编译错误。
@MyDecorator()
class Foo {
public a: number = 0;
}
const foo1: Foo = { a: 1 }; // No Error
但是foo1没有装饰,因为它不是用构造函数创建的。 我想强制使用新的ClassName()创建对象。
如何禁止使用{...}创建实例?
答案 0 :(得分:3)
Typescript使用结构化类型来确定类型之间的兼容性。如果您的类仅包含字段a
,则具有该字段的对象文字将与该类兼容。
确保您的类与对象文字不兼容的最简单方法是添加私有字段,即使您不使用它也是如此。
class Foo {
public a: number = 0;
private no:undefined;
}
const foo1: Foo = { a: 1 } //error