티스토리 뷰
Goal
- unknown타입이란?
- unknown vs any
1. unknown 타입이란?
Typescript의 unknown 타입으로 선언된 변수는 any와 마찬가지로 모든 타입의 값을 받을 수 있고 따라서 타입을 지정하기 애매할 때 선언한다.
let notSure: unknown = 4;
notSure = "maybe a string instead";
// OK, definitely a boolean
notSure = false;
any와 unknown 둘 다 모든 타입의 값을 받을 수 있다면 어떤 차이가 있을까?
2. unknown vs any
1) unknown으로 지정된 값은 any를 제외한 타입의 값에 할당 될 수 없다.
let maybe: unknown;
// 'maybe' could be a string, object, boolean, undefined, or other types
const aNumber: number = maybe;
Type 'unknown' is not assignable to type 'number'.
any는 다른 값에 할당될 수 있기 때문에 다음 예와 같은 논리적으로 맞지않은 케이스가 발생할 수 있다.
let temp: any = 'number';
let temp2: number = temp;
console.log(typeof temp2); // "string"
// temp2를 number 타입으로 선언했음 에도 temp를 할당한 뒤의 typeof 결과는 string이 됨.
2) unknown타입을 사용할 때는 강제적으로 타입을 좁혀서 사용해야 한다.
unknown 타입으로 지정한 변수의 프로퍼티나 인덱스에 접근하려면 컴파일 타임에 에러를 검출한다.
(Unable to compile TypeScript)
const unknownVal:unknown = "string";
const anyVal:any = "string";
unknownVal[1]; // Object is of type 'unknown'
anyVal[1]; // Ok
unknownVal.toString() // Object is ofType 'unknown'
anyVal.toString() // Ok
any는 모든 접근을 허용하지만 unknown은 타입을 좁혀야 위와 같은 접근을 허용한다.
const unknownVal:unknown = "string";
const anyVal:any = "string";
if (typeof unknownVal === "string") {
console.log(unknownVal[1]) // Ok
}
anyVal[1]; // Ok
위와 같이 unknown의 값을 다른 타입에 할당하거나 (any제외), 프로퍼티, 인덱스에 접근할 때 컴파일 에러를 방지하는 특징으로 인해 타입을 선언하기 어려운 경우에는 any보다 unknown으로 타입을 지정하는 것이 개발자의 실수를 방지한다.
'토막지식시리즈 > javascript 토막지식' 카테고리의 다른 글
Typescript에서 interface와 타입별칭으로 정의한 타입의 프리뷰가 다른이유. (0) | 2021.10.15 |
---|---|
Typescript는 어떻게 동작할까? (왜 safe할까?) (0) | 2021.10.15 |
Typescript 타입 종류 알아보기! (any) (0) | 2021.07.10 |
[Typescript] Non-null assertion operator (Non-null 단언 연산자) (0) | 2021.06.28 |
vs code에서 typescript run하기 (0) | 2021.01.10 |
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- 20200512
- 20200406
- 20200503
- chapter8
- 20200330
- 20201204
- chapter7
- 20200502
- 20200804
- 20200413
- 20200510
- 20200403
- 20200423
- 20200624
- 20200319
- 생활코딩리눅스
- 20200428
- 20200622
- 백준
- 20200420
- 20200424
- 20200317
- 20200417
- 20200421
- 20200415
- 20200427
- likelion
- 20200429
- 20200425
- 20200504
- Total
- Today
- Yesterday