-
(TypeScript) - TypeScript 타입 단언개발/TypeScript 2025. 8. 20. 16:13반응형
■ 타입 단언
type Person = { name: string; age: number; }; let person = {} as Person; person.name = '송송송'; person.age = 27;Person 타입이 정해져 있는데 person 처럼 빈 객체로 우선적으로 할당하고 싶다고 가정해보자.
원래대로라면 Person 객체 프로퍼티가 있기 때문에 빈 객체 선언은 불가능하다.
하지만 프로퍼티의 값을 빈 객체로 선언하고 나중에 정하고 싶을 때 타입 선언이 가능한 것을 타입 단언이라고 한다.
type Dog = { name: string; color: string; }; let dog: Dog = { name: '돌돌이', color: 'brown', bread: '진도', //추가 프로퍼티 오류! };다음과 같이 기존 타입에 없던 새로운 프로퍼티를 추가하면 추가 프로퍼티 오류가 발생한다.
let dog = { name: '돌돌이', color: 'brown', bread: '진도', } as Dog;그럴 때는 위에 as 로 타입 단언을 해준 것처럼 타입 단언을 해주면 오류가 해결된다.
■ 타입 단언의 규칙
/** * 타입 단언의 규칙 * 값 as 단언 <- 단언식 * A as B * A 가 B 의 슈퍼타입이거나 * A 가 B 의 서브타입이어야 함 */ let num1 = 10 as never; //가능 -> A가 B의 슈퍼타입 let num2 = 10 as unknown; //가능 -> A가 B의 서브타입 let num3 = 10 as string; //불가능타입 단언은 마음대로 사용해서는 안된다. (타입 오류를 넘기는 타입스크립틑의 이점을 잃을 수 있다.)
다음과 같이 단언하기 위해서는 A 가 B 의 슈퍼타입이거나, A 가 B 의 서브타입이어야 한다.
num1 과 num2 는 이를 만족했으나,
num3 은 number 와 string 으로 아예 겹치지 않는다.
따라서 타입 단언 규칙과 맞지 않으므로 오류에 해당한다.
let num3 = 10 as unknown as string;다음과 같이 다중 단언을 하면 오류는 해결된다.
먼저 number 를 unknown 타입으로 할당하면 10 은 unknown 타입이 된다.
여기서 다시 as string 을 통해 10(unknown) 이 슈퍼타입임으로 string 타입이 된다.
이렇게 단언 규칙을 무조건 될 수 있게 만들수는 있으나
이 방법은 거의 쓰면 안된다.
왜냐하면 이는 타입 스크립트를 써서 타입 오류를 검증하는 장점을 없애버리기 때문이다.
■ const 단언
/** * const 단언 */ let num4 = 10 as const;const 단언을 하게 되면 마치 const 로 할당한 것처럼 number 리터럴 타입이 된다.

객체에서 타입 단언을 사용하게 되면 readonly 된 객체로 추론된다.
따라서 프로퍼티의 값을 수정할 수 없는 값이 된다.
즉, as const 를 붙이면 모든 프로퍼티에 일일이 readonly 를 붙이지 않고
읽기만 가능한 객체를 생성하는 것이 가능하다.
■ non null 단언
: 어떤 값이 null 이거나 undefined 가 아니라고 컴파일러에게 알려주는 단언이다.
const len: number = post.author?.length; //불가능? (옵셔널 체이닝) : null 이거나 undefined 인 경우 오류가 남으로 물음표를 붙여줘서 실행 시 만약 프로퍼티가 없다면 post.author?.length 자체가 undefined 로 만들어준다.
여기 값은 오류가 난다.
왜냐면 len 은 number 타입인데 post.author?.length 가 undefined 가 되면
number 안에 undefined 값이 들어갈 수 없기 때문이다.
const len: number = post.author!.length;그럴 경우 ? 를 ! 로 바꿔주면 된다.
! 는 해당 값이 null 이거나 nudefined 가 아니라고 타입스크립트가 믿게 만드는 것이다.
타입 단언은 실제 그 값을 그 타입으로 변환하는 것이 아니라 타입스크립트 컴파일러를 잠깐 속이는 것이다.
따라서 앞선 것과 같이 단언은 확실할 때만 사용해야 한다.
반응형'개발 > TypeScript' 카테고리의 다른 글
(TypeScript) - 서로소 유니온 타입 (0) 2025.08.21 (TypeScript) - TypeScript 타입 좁히기 (1) 2025.08.20 (TypeScript) - TypeScript 타입 추론 (0) 2025.08.20 (TypeScript) - TypeScript 대수 타입 (0) 2025.08.20 (TypeScript) - 객체 타입 호환성 (0) 2025.08.20