front-end/TypeScript

[TypeScript] 기본타입 (any, unknown)

Ash_O 2023. 8. 6. 21:07

any

any타입에는 모든 종류의 값을 다 저장할 수 있다.

let anyType: any;
anyType = 1;
anyType = true;
anyType = ["sports",1];

근데 아래처럼 하게되면 오류가 난다

ley anyArray: any[];
anyArray = 1;

// 배열이니까

단점이 너무 크다.

타입스크립트를 쓰는 이유가 사라지는 것이다.

any타입을 쓰는 곳은 타입스크립트 컴파일러가 작동하지 않는다.

 

어떤 값이나 종류의 데이터가 어디에 저장될지 모르겠을때 대비하려고 쓸 수 있다.


unknown

any와는 다른 타입이다.

사용자가 뭘 입력할지 알 수 없기 때문에 unknown 인것이다.

 

에러 발생없이 어떤 값이든 저장할 수 있다.

let unknownInput: unknown;

unknownInput = 5;
unknownInput = 'string';

any와 비슷해보이는데, 동작이 다르다

 

만약 unknown 타입 변수에 있는 값을 다른 변수에 전달해보자.

let otherInput: string;
otherInput = unknownInput;
// 'unknown' 형식은 'string' 형식에 할당할 수 없습니다.

위와 같은 에러가 나오는 이유는 unknown 타입의 변수는 어떤 값이든 들어갈 수 있다는 점에 있다.

unknown 타입이라 해당 변수를 통해 문자열 이외의 값이 전달될 수 있기 때문이다.

unknown에서 any타입으로 바꿔버리면 에러는 사라질 것이다 ( any는 타입스크립트에서 타입체크를 안하기 때문이다 )

 

보이는 것처럼 unknown은 any보다 제한적이다.

unknown을 사용하면 현재 저장된 타입을 확인해야 문자열을 원하는 변수에 할당할 수 있다.

즉, 다른 곳에 전달하거나 생각하는 타입의 동작으로 사용하고 싶다면 런타임 타입체크가 필요하다

어떤 타입의 값이 전달될지 알수는 없지만, 타입에 따라 어떤 동작을 수행할지는 개발자는 알 수 있다.

 

할 수 없는 동작을 알 수 있도록 해준다는 점에서 any보다 낫다.

근데, 어떤 타입인지 확실한 상황이라면 그 타입으로 명시하는게 낫다.


reference : 유데미 타입스크립트 강의

https://www.udemy.com/course/best-typescript-21/