TypeScript——interface和type的区别

73 阅读1分钟

合并

  • interface 只能使用extends继承
  • type 只能通过&交叉类型合并
interface B {}
interface A extends B {}
type qwe = string[] & B;

联合

  • interface 不可以,interface里的属性才可以使用|联合
  • type 可以定义联合类型和使用一些操作符
interface A {
  asd: number | string;
}
type qwe = number | string;

重名

  • interface 重名会合并
  • type 不可以,第二次定义的会标红,使用时会是第一次定义的
interface A {
  name: string;
}
interface A {
  age: number;
}
let a: A = { name: "aaa", age: 0 };

type a = number;
type a = string; //提示 -> 标识符“a”重复。ts
let aaa: a = 1; // 提示 -> type a = number

(补充) type高级用法

  • 总结: A extends B
  • 含义: A的值作为B的值的子类型, 遵循下图所示的包含关系(PS:上包涵下)
type a = 1 extends number ? 1 : 0; // 1
type a = 1 extends Number ? 1 : 0; // 1
type a = 1 extends Object ? 1 : 0; // 1
type a = 1 extends any ? 1 : 0; // 1
type a = 1 extends unknow ? 1 : 0; // 1
type a = 1 extends never ? 1 : 0; // 0

image.png

参考文档

blog.csdn.net/qq119556631…