属性签名

  1. interface Foo {
  2. x: number
  3. }
  4. interface Bar {
  5. y: number
  6. }
  7. /*
  8. {
  9. x: number,
  10. y: number
  11. }
  12. */
  13. type T = Foo & Bar
  14. const obj: T = {
  15. x: 1,
  16. y: 2
  17. }

索引签名

  1. interface Foo {
  2. [prop: string]: number
  3. }
  4. interface Bar {
  5. [prop: number]: number
  6. }
  7. type T = Foo & Bar
  8. /*
  9. {
  10. [prop: string]: number,
  11. [prop: number]: number
  12. }
  13. */
  14. const obj: T = {
  15. x: 1,
  16. y: 2
  17. }

调用签名与构造签名

  1. interface Foo {
  2. (name: string): string
  3. }
  4. interface Baz {
  5. (name: string): number
  6. }
  7. /*
  8. {
  9. (name: string): string,
  10. (name: string): number
  11. }
  12. */
  13. type T = Foo & Baz

交叉类型联合类型

  • & 比 | 有更高的优先级
    1. type Foo = number & string | boolean & number
    2. // 等同于 (number & string) | (boolean & number)