function checkNumberOrString(value: number | string) {
if (typeof value === 'string') {
// value가 string type임을 보장
value.split(':');
} else {
// 아닌 경우 number type임을 보장
value.toFixed(2);
}
}
function checkNumberOrNumberArray(value: number | number[]) {
if (Array.isArray(value)) {
// value Array type 여부 체크
value.slice(1);
} else {
value.toFixed(1);
}
}
class Person {
name: string;
age: number;
}
class Animal {
type: string;
}
function checkFunc(value: Person | Animal) {
if (value instanceof Person){
console.log(value.name);
console.log(value.age);
}else{
console.log(value.type);
}
}
const person = new Person();
checkFunc(person);
interface A {
x: number;
}
interface B {
y: string;
}
function testFunc(value: A | B) {
if ('x' in value){
// value : A
}else{
// value : B
}
}
type AnswerState = 'yes' | 'no' | 'unknown';
function checkAnswer(state:AnswerState) {
if(state == 'yes'){
console.log('yes');
} else if (state == 'no'){
console.log('no');
} else {
console.log('unknown');
}
}
type Question = {
type: 'question',
questionType: string
}
type Answer = {
type: 'answer',
answerType: string
}
function checkQuestionAnswer(value: Question | Answer) {
if (value.type === 'question'){
console.log(value.questionType); // success
console.log(value.answerType); // error
}else{
console.log(value.questionType); // error
console.log(value.answerType); // success
}
}
function checkFnc(value?: number | null) {
if (value === null) return ;
// value는 number
}
단순히 어떤 인자명은 어떠한 타입 이다라는 값
을 리턴하는 함수
interface Item {
name: string;
common: string;
}
interface SetItem {
setting: number;
common: string;
}
/**
* 사용자 정의 Type Guard!
*/
function isItem(arg: any): arg is Item {
return arg.name !== undefined;
}
/**
* 사용자 정의 Type Guard 사용
*/
function doFunc(arg: Item | SetItem) {
if (isItem(arg)) {
console.log(arg.name); // Success
console.log(arg.setting); // Error!
}
else {
console.log(arg.name); // Error!
console.log(arg.setting); // Success
}
}
doFunc({ name: '1234', common: '123' });
doFunc({ setting: 123, common: '123' });
https://radlohead.gitbook.io/typescript-deep-dive/type-system/typeguard