代码之家  ›  专栏  ›  技术社区  ›  Murat Karagöz

typescript 2.8.3:没有公共属性的联合类型

  •  0
  • Murat Karagöz  · 技术社区  · 6 年前

    下面的文字处理得很好 2.3.5 但它不再开了 2.8.3 .

    class A {
           variableA: string;
       }
       class B {
           variableB: number;
       }
       class C {
           variableC: boolean;
       }
       type TYPES = A | B | C;
    
       function doStuff(types: TYPES) {
           switch (types) {
           case A: // error
               break;
           case B: // error
               break;
           case C: // error
               break;
           }
       }
       doStuff(A); // error
    

    [TS] “type of a”类型的参数不能分配给“types”类型的参数。 类型“typeof a”不能分配给类型“c”。 类型“typeof a”中缺少属性“variablec”。

    如何更改此结构以使其再次工作?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Estus Flask    6 年前

    A 类型指定A/B/C类的实例,而 types 值是A/B/C类本身。

    应该是:

       type TYPES = typeof A | typeof B | typeof C;
    
       function doStuff(types: TYPES) {
           switch (types) {
           case A:
               break;
           case B:
               break;
           case C:
               break;
           }
       }
       doStuff(A);