非函数接口
interface A {
x: number,
y: number // 这样子也可以。
y: string // 会报错,也就是说多个接口定义同一个成员,类型必须一致。
}
interface A {
y: number
}
// 这个时候两个接口会合并成一个接口,即使不在同一个文件也会合并。
let a : A = {
x: 1
y: 1
}
函数接口
每一个函数都会被声明一个函数重载
interface A {
x: number,
foo (bar : number) : number (5)
foo (bar : 'flag1' )) : number (2)
}
interface A {
y: number,
foo (bar : string) : string (3)
foo (bar : number[]) : number[] (4)
foo (bar : 'flag' ) : number (1)
}
let a : A = {
x: 1,
y: 1,
foo (bar : any ) { // 需要定义一个更加宽泛的类型去接收,接收的顺利为(1)(2)(3)(4)(5)
return bar
}
}
接收顺序的原则:
1.后面定义的接口优先前面的
2.字面量类型的参数优先
命名空间的声明合并
1.命名空间中也会发生声明合并,但已经export的函数不可以重复使用
2.命名空间与函数,枚举,class类都可以进行合并。
3.命名空间与函数,class类进行合并的时候需要放在它们的后面。
网友评论