对象的类型
TS中,使用关键字interface(接口)定义一个对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| interface Person { name: string, age: number }
let a: Person = { name: "yajue" age: 24, }
|
接口合并
定义的重名接口会被合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| interface Person { name: string age: number }
interface Person { add: string }
let a: Person = { name: "yajue", age: 24, add: "下北泽" }
|
任意属性
如果只对部分属性有强制要求,其他属性随意添加,可以使用索引签名
一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集
1 2 3 4 5 6 7 8 9 10 11 12 13
| interface Person { name: string age: number [propName: string]: any }
let a: Person = { name: "yajue", age: 24, add: "下北泽" }
|
可选属性
定义可有可无的属性
1 2 3 4 5 6 7 8 9 10 11
| interface Person { name: string age?: number }
let a: Person = { name: "yajue", }
|
只读属性
定义只能被读取、不能被修改的属性,常用于方法(值为函数的属性)和后台返回的id值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| interface Person { name: string age: number readonly cb: ()=>boolean }
let a: Person = { name: "yajue", age: 24, cb: ()=> false }
a.cb()
|
接口继承
接口继承,子接口不仅有自己定义的属性,还有着父接口定义的属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| interface Person { name: string age: number }
interface Person2 extends Person { add: string }
let a: Person = { name: "yajue", age: 24 }
let b: Person2 = { name: "knn", age: Infinity, add: "朽木村" }
|
定义函数类型
接口也可以直接定义函数的类型
1 2 3 4 5 6 7 8 9
| interface Fn { (name: string): number[] }
const fn:Fn = function(name: string) { console.log(name) return [1] }
|