2016-05-15 208 views
4

Typescript中最好的方法是隻允許一些屬性值?Typescript - 屬性的允許值

class Foo { 
    public type:string; 
    // Possible values for type: ['foo1', 'foo2', 'foo3'] 

    constructor() {} 
} 

我想使這些類型成爲唯一允許的類型,防止我在擴展Foo類時放錯類型。

回答

13
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; 
    } 
} 

這就是所謂的String Literal Types