티스토리 뷰
any
와 unknown
모두 모든 타입들의 super set이다. 즉 어떤 타입도 any
와 unknown
에 넣을 수 있다.
하지만 unknown은 자기 자신과 any를 제외한 다른 타입에 할당할 수 없다. (Anything is assignable to unknown but unknown isn't assignable to anything but itself and any)
const vAny: any = 10; // any에 어떤 것도 집어넣을 수 있다.
const vUnknown: unknown = 10; // any처럼 unknown에도 어떤 것도 집어넣을 수 있다.
let s1: string = vAny; // any는 어떤 것에도 집어넣어진다.
let s2: string = vUnknown; // Invalid! unknown은 any나 unknown을 제외한 다른 타입에 할당할 수 없다.
let s3: unknown = vUnknown; // 같은 unknown 타입 또는 any 타입에는 할당 가능
vAny.method(); // 가능
vUnknown.method(); // 불가능. unknown 타입은 어떤 프로퍼티에도 접근이 불가능하다.
다만, 명시적으로 type assertion이 있거나 타입 체킹을 하면 다른 타입에 할당하거나 프로퍼티 접근이 가능하다.
let foo: unknown = 10;
function hasXYZ(obj: any): obj is {x: any, y: any, z: any} {
return !!obj && typeof obj === "object" && "x" in obj && "y" in obj && "z" in obj;
}
if (hasXYZ(foo)) {
// foo는 unknown 타입임에도 타입 가드를 사용하면 프로퍼티 접근이 허용된다
foo.x.prop;
foo.y.prop;
foo.z.prop;
}
let s: string = foo as string // type assertion을 사용하면 다른 타입에 할당 가능
이런 제한이 있기 때문에 만약 어떤 값이든 들어올 수 있지만 사용 전에 타입 체킹이 필요한 경우 등에 사용할 수 있다.
Ref
'공부일지(TIL) > JavaScript' 카테고리의 다른 글
[JavaScript] 프로토타입 (0) | 2021.03.15 |
---|---|
[JavaScript] 스코프, 스코프 체인, 클로저 (2) | 2021.03.12 |
자바스크립트 메모리 관리 (0) | 2021.01.03 |
자바스크립트 this(재정리) (0) | 2019.10.12 |
자바스크립트 스코프(Scope) (0) | 2019.10.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Java
- rxjs
- 리덕스
- 자바
- oracle
- 인스턴스
- jQuery
- Data Structure
- this
- JavaScript
- Redux
- react
- 개발 공부
- linkedlist
- package.json
- CSS
- 알고리즘
- getter
- youtube data api
- SQL
- Session
- 포인터 변수
- c언어
- useEffect
- Prefix Sums
- Conflict
- 제네릭스
- 깃
- GIT
- til
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함