簡體   English   中英

Typescript - 屬性的允許值

[英]Typescript - Allowed values for a property

Typescript 中只允許一個屬性有多個值的最佳方式是什么?

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

    constructor() {}
}

我想讓這些類型成為唯一允許的類型,以防止我在擴展 Foo 類時輸入錯誤的類型。

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

這稱為字符串文字類型

const TYPES = ['a', 'b', 'c'] as const; // TS3.4 syntax
type yourType = typeof TYPES[number]; // 'a'|'b'|'c';

您可以使用enums

enum MyType {
  Foo1 = 'foo1',
  Foo2 = 'foo2',
}

class FooClass {
  private foo: MyType;

  constructor(foo: MyType) {
    this.foo = foo;
  }
}

let bar = new FooClass(MyType.Foo2);

打字稿文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM