혼자 정리
[TS] 'satisfies' 오퍼레이터 본문
Typescript 4.9 릴리즈 노트
관련 피쳐 이슈
관련 PR
어떤 expression이 원하는 타입에 속하는지 밸리데이션을 진행하면서 동시에 기존 타입을 유지할 수 있는 오퍼레이터이다
예시를 통해 보자.
type SomeRequest = {
// ...
url: URL | string
}
이러한 타입에 속하는 변수를 만들어서 사용하고 싶은 경우가 있다.
const someRequest = {
// ...
url: new URL("http://test.com")
}
// someRequest.url 의 타입은 URL로 추론됨
// someRequest.url.host 접근 가능
하지만 위와 같이 사용하면 프로퍼티명에서 오타가 생겨도 쉽게 놓칠 수 있다.
const someRequest = {
// ...
urL: new URL("http://test.com")
}
// `urL` should be `url`
SomeRequest
타입을 타입 어노테이션으로 사용하면 오타를 잡을 수 있지만 url
프로퍼티의 타입을 보다 일반적인 SomeRequest.url
타입으로 다시 확장시키는 효과를 갖게 된다.
const someRequest: SomeRequest = {
// ...
urL: new URL("http://test.com")
// 에러 메시지: Object literal may only specify known properties, but 'urL' does not exist in type 'SomeRequest'. Did you mean to write 'url'?
}
const someRequest: SomeRequest = {
// ...
url: new URL("http://test.com")
}
// 에러 메시지: Property 'host' does not exist on type 'string | URL'.
// 에러 메시지: Property 'host' does not exist on type 'string'.
someRequest.url.host
이 때 satisfies
오퍼레이터를 사용하면 specific한 타입은 유지하면서 타입 밸리데이션도 할 수 있다.
const someRequest = {
// ...
urL: new URL("http://test.com") // 에러 메시지: Object literal may only specify known properties, but 'urL' does not exist in type 'SomeRequest'. Did you mean to write 'url'?
}
const someRequest = {
url: new URL("http://test.com")
} satisfies SomeRequest
someRequest.url.host; // 타입 에러 발생 x
'자바스크립트, 타입스크립트' 카테고리의 다른 글
Node.js의 CommonJS, ESM 모듈 호환성 (0) | 2024.04.01 |
---|---|
[NestJS] 필터에서 다른 필터로 예외 전달하기 (0) | 2022.09.30 |
[TS] (실수 정리) 파라미터의 타입만 서로 다른 함수의 유니온 (0) | 2022.09.19 |
blur 이벤트 발생지가 window내부인지 외부인지 구분하기 (0) | 2022.06.13 |
[JS]Execution Context 기본 개념 (0) | 2021.10.30 |