✏️Before
interface User {
name: string;
age: number;
gender?: string;
readonly birthYear: number;
1?: string;
2?: string;
3?: string;
4?: string;
}
let user2:User = {
name: 'aaa',
age: 30,
birthYear: 1990,
1: 'A'
}
1부터 4까지 key는 number이고, value는 string인 interface가 중복된다.
interface의 내부도 type으로 지정할 수 있다.
⭐️After 1-1
interface User {
name: string;
age: number;
gender?: string;
readonly birthYear: number;
[grade:number]: string;
}
let user2:User = {
name: 'aaa',
age: 30,
birthYear: 1990,
1: 'A'
}
grade라는 key 값은 number이고, value는 string이다.
여기서 string의 값을 조금 더 한정적으로 좁혀줄 수 있다.
⭐️After 1-2
type Score = 'A' | 'B' | 'C' | 'D' | 'F'
interface User {
name: string;
age: number;
gender?: string;
readonly birthYear: number;
[grade:number]: Score;
}
let user2:User = {
name: 'aaa',
age: 30,
birthYear: 1990,
1: 'A'
}
❌
type Score = 'A' | 'B' | 'C' | 'D' | 'F'
interface User {
name: string;
age: number;
gender?: string;
readonly birthYear: number;
[grade:number]: Score;
}
let user2:User = {
name: 'aaa',
age: 30,
birthYear: 1990,
<u>1: 'b'</u>
}
type에 정의되어 있지 않은 value 값을 쓰는 경우,
이런 error가 뜬다.