object 자료에 타입을 미리 만들때
object 자료에 어떤 속성들이 들어올 수 있는지 아직 모르는 경우
타입지정할 속성이 너무 많은 경우
index signatures
를 사용하면 편리합니당
interface StringOnly {
age :number,
[key : string] : string | number,
👉👉모든 문자로 된 속성
}
let user :StringOnly = {
name : 'kim',
location : 'Seoul',
nickname : 'kurong',
age : 20
}
🙄속성 이름이 숫자인 경우에는?🙄
interface StringOnly {
[key : number] : string,
👉👉숫자로 된 속성
[key : string] : string
==> 사실 이렇게 해도 오류는안난다. 왜냐면 object에서
숫자로 key값을 정의해도, 문자화 되기때문에.
}
let user :StringOnly = {
0 : 'kim',
1 : 'Seoul',
}
쓸일은 별로 없겠지만
object 안에 object.... 이런 object 자료 타입지정은 어떻게할까요?
interface MyType {
'font-size' : {
'font-size' : {
'font-size' : number
}
}
}
let obj :MyType = {
'font-size' : {
'font-size' : {
'font-size' : 14
}
}
}
이렇게해도되지만, 더 간략하게 하는방법이 있어요
recursive
하게 타입만드는법.
interface MyType {
'font-size': MyType | number
==> {'font-size':MyType}
}
let obj :MyType = {
'font-size' : {
'font-size' : {
'font-size' : 14
}
}
}
interface TwoType {
[key : string] : string | number,
}
let obj :TwoType = {
model : 'k5',
brand : 'kia',
price : 6000,
year : 2030,
date : '6월',
percent : '5%',
dealer : '김차장',
}
interface MyType {
'font-size' : number,
[key :string<] : number | MyType,
}
let obj = {
'font-size' : 10,
'secondary' : {
'font-size' : 12,
'third' : {
'font-size' : 14
}
}
}