typescript中的声明合并

2020-03-05  本文已影响0人  我性本傲
非函数接口
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类进行合并的时候需要放在它们的后面。

上一篇 下一篇

猜你喜欢

热点阅读