typescript 属性修改器 可选 只读 索引签名
可选属性
interface MyType {
name: string
opts?: string
}
function func(opts:MyType){}
func({name:'a'})
func({name:'b',opts:'123'})
func({opts:'1234'}) //报错
// 通过结构给默认值
function func2({name,opts=''}: MyType){}
只读属性
interface MyType {
readonly prop: string
}
const obj = {prop:'a'}
obj.prop = 'b' //报错
注:相同形状的类型可以兼容
interface MyType{
prop: string
}
interface MyReadonlyType{
readonly prop:string
}
let writableObj:MyType = {prop:'a'}
let readonlyObj:MyReadonlyType = writableObj
writableObj.prop = 'b' // 修改属性会导致readonlyObj.prop也变更,实际引用的同一个对象
readonlyObj.prop = 'c' // 报错
索引签名
索引的类型只能是number或string
interface StringArray {
[ index: number]: string
}
const strArr: StringArray = ['a','b']
interface NumberMap {
[ props: string]: number,
length: number // 类型必须与索引类型兼容,例如需要定义string属性,那么索引的值类型必须是number | string
}
const numMap: NumberMap = {
x: 100,
y: 200,
length: 2
}