typescript 接口定义:
interface 接口名称{
}
在接口里面定义属性,例如:
interface Iperon {
firstName: string,
lastName: string
}
在接口里面定义函数,例如:
interface Iperson{
firstName: string.
lastName: string,
say: (arg1: string, arg2: string) => boolean
}
只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型
需要注意接口不能转换为 JavaScript。 它只是 TypeScript 的一部分。所以在编译好的js代码中是没有接口这部分代码的。
在接口里面定义数组,例如:
interface Iperson {
name: string,
age: number,
say:(aa:number) => string
[index:number]: string
}
var p1: Iperson = {
name: 'tmac',
age: 18,
say: function(a:number):string {
return 'hello'
}
};
p1[0] = '12'
console.log(p1[0])
接口里面定义了数组,index索引值可以规定为数值或者字符串,后面是规定数组每一项元素的类型。既然变量p1是接口类型Iperson,接口类型Iperson里面定义了数组,那么p1也可以当作一个数组。根据接口中数组的定义,这个数组的index索引必须是数字,每一项元素必须是字符串。
只读属性和可选属性:readonly 和 ?
interface Iperson2 {
readonly name: string, //readonly 表示该属性只读,不可设置更改
age: number,
height?: number //? 表示该属性是可选属性,对象里面该属性可有可无,加不加都不会报错
}
var person2: Iperson2 = {
name:'kzt',
age:18
}
person2.name = 'kzt2' // 编译报错,name属性是只读的,所以不可以更改
接口继承
接口继承就是说接口可以通过其他接口来扩展自己。typescript 允许接口继承多个接口。
继承使用关键字 extends。
单接口继承语法格式:
Child_interface_name extends father_interface_name {
}
多接口继承语法格式:
Child_interface_name extends father_interface1_name,father_interface2_name,......,father_interfaceN_name {
}
interface father1 {
n1: number
}
interface father2 {
n2: number
}
interface child extends father1,father2{
n3: string
}
var res:child = {n1:12, n2:24, n3:'abc'};
console.log(res) //{n1: 12, n2: 24, n3: "abc"}