• 如果传入的变量和声明的类型不匹配,TS就会进行类型检查
  • 原理就是 Duck-Check鸭子检测法,就是说只要目标类型中声明的属性变量在源类型中都存在就是兼容的

接口的兼容性

  1. export { }
  2. // 接口的兼容性
  3. interface Animal {
  4. name: string
  5. age: number
  6. }
  7. interface Person {
  8. name: string
  9. age: number
  10. gender: number
  11. }
  12. function getName(a: Animal): string {
  13. return a.name
  14. }
  15. let a: Animal = {
  16. name: '哈哈1',
  17. age: 2
  18. }
  19. getName(a)
  20. let b: Person = {
  21. name: '哈哈2',
  22. age: 3,
  23. gender: 0
  24. }
  25. // 即使b和Animal类型并不是完全匹配,但是其满足a的形状,虽然在其身上做了一些扩展,但TS也认为这是兼容的
  26. getName(b)
  27. // 注意:如果不是通过变量的方式间接传入而是直接传入是不行的
  28. getName({
  29. name: '哈哈2',
  30. age: 3,
  31. gender: 0
  32. })
  33. // 传参的时候相当于是这样赋值的,自然是不允许的
  34. // let a: Animal = {
  35. // name: '哈哈2',
  36. // age: 3,
  37. // gender: 0
  38. // }

基本数据类型的兼容性