在Typescript中,只允许为属性提供多个值的最佳方法是什么?
class Foo {
public type:string;
// Possible values for type: ['foo1', 'foo2', 'foo3']
constructor() {}
}
我希望将这些类型设为唯一允许的类型,以防止我在扩展Foo类时输入错误的类型。
答案 0 :(得分:35)
class Foo {
public type: "foo1" | "foo2" | "foo3";
constructor() {}
}
或
type MyType = "foo1" | "foo2" | "foo3";
class Foo {
public type: MyType;
constructor() {}
}
但这仅在编译时强制执行,而不是在运行时执行
如果您想确保Foo.type
的值只是其中一个值,那么您需要在运行时检查它:
type MyType = "foo1" | "foo2" | "foo3";
class Foo {
public type: MyType;
constructor() {}
setType(type: MyType): void {
if (["foo1", "foo2", "foo3"].indexOf(type) < 0) {
throw new Error(`${ type } is not allowed`);
}
this.type = type;
}
}
答案 1 :(得分:0)
您可以使用enums
:
enum MyType {
Foo1 = 'foo1',
Foo2 = 'foo2',
}
class FooClass {
private foo: MyType;
constructor(foo: MyType) {
this.foo = foo;
}
}
let bar = new FooClass(MyType.Foo2);
答案 2 :(得分:0)
const TYPES = ['a', 'b', 'c'] as const; // TS3.4 syntax
type yourType = typeof TYPES[number]; // 'a'|'b'|'c';