typescript1.4 - Typing en array med en unionstype i TypeScript?


Jeg lurte bare på om det er mulig å typisere en array med en unionstype, slik at én array kan inneholde både epler og appelsiner, men ingenting annet.

Noe sånt

var arr : (Apple|Orange)[] = [];

arr.push(apple); //ok
arr.push(orange); //ok
arr.push(1); //error
arr.push("abc"); // error

Unødvendig å si, eksemplet ovenfor fungerer ikke, så dette kan være umulig, eller går jeg glipp av noe?

Svar #1

class Apple {
  appleFoo: any;
}

class Orange {
  orangeFoo: any;
}

var arr : Array<Apple|Orange> = [];

var apple = new Apple();
var orange = new Orange();

arr.push(apple); //ok
arr.push(orange); //ok
arr.push(1); //error
arr.push("abc"); // error

var something = arr[0];

if(something instanceof Apple) {
  something.appleFoo; //ok
  something.orangeFoo; //error
} else if(something instanceof Orange) {
  something.appleFoo; //error
  something.orangeFoo; //ok
}

Svar #2

I henhold til TS 2.3.4 er så enkelt som

let someArray: (typeA|typeB)[] = [
  new typeA(),
  new typeB()
]

Relaterte artikler