三分钟了解interface和type

概述

在这里插入图片描述

在 TypeScript 中,type 和 interface 都用于定义自定义数据结构,但它们有不同的用途和语法。

typescript系列教程

typescript 类型及使用
typescript 三种类修饰符
typescript抽象类 abstract
typescript接口 interface
typescript 泛型常见用法
typescript class可以作为类型定义被扩展
三分钟了解interface和type
typescript 模块化,命名空间
typescript 装饰器全集

type

type 关键字用于创建新的数据类型别名(type alias),它允许你为现有的数据类型(原始数据类型、对象、联合类型、交叉类型等)起一个新的名称。使用 type 可以使代码更具可读性,同时还可以将复杂的类型定义封装起来以便重用。

type User = {
  id: number;
  name: string;
};

type Admin = {
  id: number;
  role: string;
};

type UserOrAdmin = User | Admin; // 联合

type Point2D = { x: number; y: number };
type Point3D = { x: number; y: number; z: number };

type Point2DOr3D = Point2D | Point3D; // 交叉

type MathFunction = (x: number, y: number) => number; // 函数

interface

interface 关键字用于定义对象的结构和属性。它主要用于声明对象的形状,可以包含属性、方法、和可选属性,但不能包含联合类型、交叉类型、或原始数据类型。

interface 在声明类的时候经常用于定义类的接口。类实现(implements)接口时必须实现接口中声明的属性和方法

interface Vehicle {
  start(): void;
  stop(): void;
}

class Car implements Vehicle {
  start() {
    console.log("Car is starting.");
  }

  stop() {
    console.log("Car is stopping.");
  }
}

总结 interface和type的主要区别

1 类型别名可以用于其它类型 (联合类型、元组类型、交叉类型),interface不支持这些,interface支持对象类型定义更好。

type PartialPointX = { x: number };
type PartialPointY = { y: number };

// union(联合)
type PartialPoint = PartialPointX | PartialPointY;

// tuple(元祖)
type Data = [PartialPointX, PartialPointY];

//primitive(原始值)
type Name = Number;

// typeof的返回值
let div = document.createElement('div');
type B = typeof div;

2 interface 可以多次定义 并被视为合并所有声明成员 type 不支持

interface Point {
  x: number;
}
interface Point {
  y: number;
}

const point: Point = { x: 1, y: 2 };

3 type 能使用 in 关键字生成映射类型,但 interface 不行。

type Keys = 'firstname' | 'surname';

type DudeType = {
  [key in Keys]: string;
};

const test: DudeType = {
  firstname: 'Pawel',
  surname: 'Grzybek',
};

4 默认导出方式不同

// inerface 支持同时声明,默认导出 而type必须先声明后导出
export default interface Config {
  name: string;
}
// 同一个js模块只能存在一个默认导出哦
 type Config2 = {name: string}
  export default Config2

type或者interface使用指南

在选择使用 type 还是 interface 时,你可以根据具体情况来决定。通常来说,如果你需要定义对象的结构,或者要求类实现某个结构,使用 interface 是一个不错的选择。而如果你需要复杂的联合类型或交叉类型,或者仅仅是为了给某个类型起一个别名以提高可读性,那么使用 type 是更合适的。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可缺不可滥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值