当前位置:   article > 正文

ts中interface与type的区别_use an `interface` instead of a `type`

use an `interface` instead of a `type`

1.typeof 的类型别名可以用于其他的类型,比如 联合类型、元组类型、基本类型,interface只能表示function,object和class类

  1. // 基本类型
  2. type person = string
  3. // 联合类型
  4. interface Dog {
  5. name: string;
  6. }
  7. interface Cat {
  8. age: number;
  9. }
  10. type animal = Dog | Cat
  11. // 元组类型
  12. interface Dog {
  13. name: string;
  14. }
  15. interface Cat {
  16. age: number;
  17. }
  18. type animal = [Dog, Cat]

2.type 的别名不可以多次定义会报错,而 interface 则可以多次定义,会将其视为合并到一起。

  1. // ok
  2. interface aaa {
  3. age: Number;
  4. }
  5. interface aaa {
  6. name: string;
  7. }
  8. export const bbb = (params: aaa) => {
  9. ...
  10. }
  11. bbb({name: 'mm', age: 27}) // age和name属性都要有,否则就会报错
  12. // 不ok
  13. // eslint提示:标识符“aaa”重复。ts(2300)。Use an `interface` instead of a `type`.
  14. type aaa = string | number;
  15. type aaa = {x: number, y: number};

3.type 能用 in 关键字,而interface不行。

  1. type Keys = "firstName" | "lastName" ;
  2. type DudeType = {
  3. [key in Keys]: string;
  4. }
  5. const test: DudeType = {
  6. firstName: 'Anna',
  7. lastName: 'LMY',
  8. }

4.默认导出的方式不同,inerface 支持同时声明,默认导出,而type必须先声明后导出

  1. // 默认导出 不一致
  2. export default interface{
  3. name: string;
  4. age: number;
  5. }
  6. type personInfo = [string, number];
  7. export default personInfo;
  8. // 分别导出 一致
  9. export interface{
  10. name: string;
  11. age: number;
  12. }
  13. export type sizeType = 'small' | 'middle' | 'large' | undefined;

5..扩展方式不同,interface 用 extends 来扩展,而type 用 & 操作符扩展

  1. // interface extends interface
  2. interface Person {
  3. name: string
  4. }
  5. interface User extends Person {
  6. age: number
  7. }
  8. // interface extends type
  9. type Person = {
  10. name: string
  11. }
  12. interface User extends Person {
  13. age: number
  14. }
  15. // type & type
  16. type Person = {
  17. name: string
  18. }
  19. type User = Person & { age: number }
  20. // type & interface
  21. interface Person {
  22. name: string
  23. }
  24. type User = {age: number} & Person

6. type可以使用typeof获取实例类型

  1. let div = document.createElement('div');
  2. type B = typeof div

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/326566
推荐阅读
相关标签
  

闽ICP备14008679号