Programing

TypeScript에서 조합 유형을 사용하여 배열을 입력하시겠습니까?

c10106 2022. 3. 21. 08:47
반응형

TypeScript에서 조합 유형을 사용하여 배열을 입력하시겠습니까?

단지 하나의 배열로 사과와 오렌지를 모두 담을 수 있도록 조합형으로 배열하는 것이 가능한지 궁금했을 뿐이다.

뭐랄까

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

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

말할 필요도 없이, 위의 예는 효과가 없어서 이것이 불가능할 수도 있고, 아니면 내가 무언가를 놓치고 있는 것일까?

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
}

TS 2.3.4에 따르면 다음과 같이 간단하다.

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

참조URL: https://stackoverflow.com/questions/29794014/typing-an-array-with-a-union-type-in-typescript

반응형