함수에 타입 지정하는 법 & void 타입 (3)
2024. 9. 11. 20:10ㆍ카테고리 없음
728x90
반응형
함수는 총 두 군데 타입지정이 가능합니다.
1. 함수로 들어오는 자료 (파라미터)
2. 함수에서 나가는 자료 (return)
function car(x :number) :number {
return x * 2
}
1. 함수로 들어오는 파라미터 타입지정은 파라미터 옆에 적으면 됩니다.
2. 함수가 실행된 후 남는 값 (return 우측에 있는 값) 타입지정하고 싶으면 함수명() 우측에 적으면 됩니다.
void 함수는 return할 자료가 없는 함수의 타입으로 사용가능합니다.
function car(x :number) :void {
return x * 2 //여기서 에러남
}
함수도 마찬가지로 union type을 사용할 수 있습니다.
function car(x? : number) : void{
}
car()
파라미터가 옵션인 경우 변수? : 타입
변수? :number 는 변수:number | undefined 와 같습니다.
function car(x? : number | undefined) : void{
}
car()
function car (x: number | string): void{
console.log(x+3)
}
car(2)
이 코드가 에러가 나는 이유는 +는 왼쪽 타입이 숫자거나 문자여야 하는데 지금 x는 number | string 이기 때문에 오류가 납니다.
이렇게 Type이 하나로 확정되지 않았을 경우 Type Narrowing을 사용해야합니다.
function car(x :number | string){
if (typeof x === 'number') {
return x + 1
}
else if (typeof x === 'string') {
return x + 1
}
else {
return 0
}
}
narrowing을 사용하기 귀찮으면 assertion 문법을 사용하면 됩니다. (타입을 덮어쓴다.)
function car(x : number|string) {
let array : number[] =[];
array[0] = x; // 오류나는 이유는 x 타입이 애매하기 때문입니다. 애매하면 narrowing을 사용해한다
}
car(123);
function car(x : number|string) {
let array : number[] =[];
array[0] = x as number; //왼쪽에있는 변수를 number로 덮어 사용해주세요
car(123);
1. union type 같은 복잡한 타입을 하나의 정확한 타입으로 줄이는 역할을 수행합니다. (union type을 확정시키때)
2. 왜 타입에러가 나는지 정말 모르겠는 상황에 임시로 에러해결용으로 사용하거나
3. 내가 어떤 타입이 들어올지 정말 확실하게 알고 있는데 컴파일러 에러가 방해할 때