typescript 타입을 미리 정하지 못하면? (union type, any, unknown)

jangdu·2023년 3월 23일
0

typescript

목록 보기
9/16

만약 변수에 들어올 값이 string인지 number인지 모를 때 어쩔지 알아보자.
방법이 몇가지가 있는데

Union Type

이변수에는 string이나 number가 들어갈 수 있다는 의미인 타입 정의를 할때는 |연산자를 사용한다.
이친구를 Union Type이라고 합니다.

let name: string | number = 'kim';
let age: (string | number) = 100;

할당하는 순간 타입은 string이나 number만 들어갈 수 있다.

array에 어케씀?

let array: (string | number)[] = [1, '2']

이렇게 씀 ㅇㅇ

object에는?

let object: {data : (number | string)} = { data : '123 }                                          

이렇게 씀 ㅇㅇ

any Type

아무 자료나 넣을 수 있는 타입이다.

let name: any = kim;
name = 123;
name = undefined;
name = [];

any타입은 갑자기 타입을 막 바꿔도 에러가 안난다.
이거 마구잡이로 쓰면 타입스크립트 장점 없어지니까 비상시에만

unknown type

let name: unknown = 'kim';
name = 123;
name = undefined;
name = [];

요즘엔 이거 많이 쓰는데
any랑 비슷함
모든 타입을 넣을 수 있고, 자료를 집어 넣어도 타입은 그대로 unknown이다.

let 이름: unknown;

let 변수1: string = 이름;
let 변수2: boolean = 이름;
let 변수3: number = 이름;
// 이거 다 에러

unknown 타입을 다른데 집어넣을 때는 에러가 난다.
any는 안그런다.

ts는 정확하고 확실해야한다.
확실하지 않은 타입에 연산하지 못한다.
ts에서 뺄셈은 number류만 할 수 있고, unknown에서도 안된다.
.name이런건 object류의 타입만 할 수 있다.

즉, 아직 집어넣을 게 뭔지 모르겠고 안정성을 원하면 unknown을 쓰자

unknown 타입인 변수를 조작할 때
조작할 변수의 타입이 뭔지 확실 히 체크하는 narrowing이나 assertion을 사용해야 한다.
변수에 뭐가 들어있을지 애매하면 반드시 사용하자.

profile
대충적음 전부 나만 볼래

0개의 댓글