function logMsg(value: string | number) {
if(typeof value === 'number'){
value.toString();
}
if(typeof value === 'number'){
//...
}
throw new TypeError('value must be string or number');
}
logMsg('hello');
logMsg(100)
var choyeah: string | number | boolean;
choyeah = 'str';
choyeah = 1000;
choyeah = true;
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function askSomeone(someone: Developer | Person) {
someone.name;
}
askSomeone({ name: 'Developer', skill: 'ts'});
askSomeone({ name: 'Person', age: 30});
두 인터페이스의 공통 속성인 name만 접근 가능하다, 타입스크립트 입장에서는 어떤 타입이 들어올지 모르므로 모든 속성을 제공할 경우 에러를 일으킬 가능성이 있기 때문이다.
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function askSomeone(someone: Developer & Person) {
someone.name;
someone.age;
someone.skill;
}
askSomeone({ name: 'Both', skill: 'ts', age: 30})
인터섹션 타입을 사용하여 위와 같이 두 인터페이스를 사용할 경우 두 인터페이스의 모든 속성을 가진 타입이 인자로 들어와야 한다. (var choyeah: string & number & boolean; 같은 정의는 절대 불가함)