스파르타에서 타입스크립트 입문 1주차 마무리로 간단한 퀴즈를 줬다.
주로 타입 에러가 발생하는 부분이 어디인지 찾는 문제들이었다. 헷갈렸던 문제들을 정리해본다.
문제: 다음 코드에서 타입 에러가 발생하는 부분을 모두 고르세요
let v1: object;
v1 = { name: "abc"}
console.log(v1.name)
정답: console.log(v1.name)
의 name
에서 에러가 발생한다.
발생한 에러는 Property 'name' does not exist on type 'object'.
타입을 지정할 때 object
의 경우 리터럴, interface, type으로 지정해줘야 속성 타입을 읽을 수 있다.
1) interface로 지정
2) type으로 지정
3) 리터럴로 지정
문제: 다음 코드에서 타입 에러가 발생하는 부분을 모두 고르세요
let v2: (2 | 4 | 6) & (3 | 4 | 5)
v2 = 3;
v2 = 4;
정답: v2 = 3;
에서 에러가 발생한다.
발생한 에러는 Type '3' is not assignable to type '4'.
& 연산자로 이어진 교차 타입이기 때문에 양쪽 항을 모두 만족하는 값(4
)만 포함된다.
문제: 다음 코드에서 타입 에러가 발생하는 부분을 모두 고르세요
interface Person {
name: string;
age: number
}
interface Product {
name: string;
price: number
}
type PP = Person & Product
const p1: PP = {
name: "a"
}
const p2: PP = {
age: 23,
price: 1000
}
const p1: PP = {
name: "a",
age: 23,
price: 1000
}
답: const p1
, const p2
에 에러가 발생한다.
type PP
는 Person
과 Product
인터페이스를 교차(&
)해서 만들어졌기 때문에, 두 인터페이스의 속성을 모두 만족해야 한다.
그래서 모든 속성을 가진 const p3
를 제외하고 에러가 발생한다.