TypeScript --- interface接口详解

目录

接口

接口中的任意属性 

接口和类型别名type的区别

1. 两者都可以用来描述对象或函数的类型

2.与接口不同,类型别名还可以用于其他类型,如基本类型(原始值)、联合类型、元组

3.接口可以定义多次,类型别名不可以

4.接口和类型别名的扩展

· 接口扩展接口 

· 类型别名扩展类型别名

· 接口扩展类型别名

· 类型别名扩展接口 


接口

在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。

TypeScript 中的接口是一个非常灵活的概念,除了可用于[对类的一部分行为进行抽象]以外,也常用于对「对象的形状(Shape)」进行描述。

interface Person {
    name: string;
    age: number;
}
let Du: Person = {
    name: 'Du',
    age: 23
};

我们定义了一个接口 Person,接着定义了一个变量 Du,它的类型是 Person。这样,我们就约束了 Du的形状必须和接口 Person 一致,少一些属性和多一些属性都是不允许的,接口一般首字母大写。

接口中的任意属性 

有时候我们希望一个接口中除了包含必选和可选属性之外,还允许有其他的任意属性,这时我们可以使用 索引签名 的形式来满足上述要求。 

interface Person {
    name: string;
    age?: number;
    [propName: string]: any;
}

let tom: Person = {
    name: 'Du',
    class:'Web'
};

 这里注意:一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集。在上例中,name和age都必须是any的子类型。

一个接口中只能有一个任意属性,如果接口中有多个类型的属性,则可以在任意属性中使用联合类型去定义:

interface Person {
    name: string;
    age?: number; // 这里真实的类型应该为:number | undefined
    [propName: string]: string | number | undefined;
}

let tom: Person = {
    name: 'Tom',
    age: 23,
    class: 'Web'
};

 在上述例子中,name和age的类型都是class联合类型的子集。

接口和类型别名type的区别

在大多数的情况下接口类型类型别名的效果等价,但是在某些特定的场景下这两者还是存在很大区别的。

TypeScript 的核心原则之一是对值所具有的结构进行类型检查。 而接口的作用就是为这些类型命名的数据定义数据模型。

type(类型别名)会给一个类型起个新名字。 type 有时和 interface 很像,但是type可以作用于原始值(基本类型),联合类型,元组以及其它任何类型。

1. 两者都可以用来描述对象或函数的类型

· interface:

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

interface SetPoint {
  (x: number, y: number): void;
}

· type: 

type Point = {
  x: number;
  y: number;
};

type SetPoint = (x: number, y: number) => void;

2.与接口不同,类型别名还可以用于其他类型,如基本类型(原始值)、联合类型、元组

// primitive
type Name = string;

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

// union
type PartialPoint = PartialPointX | PartialPointY;

// tuple
type Data = [number, string];

// dom
let div = document.createElement('div');
type B = typeof div;

3.接口可以定义多次,类型别名不可以

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

4.接口和类型别名的扩展

接口可以扩展类型别名,同理,类型别名也可以扩展接口。

接口的扩展就是继承,通过 extends 来实现。类型别名的扩展就是交叉类型,通过 & 来实现。

· 接口扩展接口 

interface PointX {
    x: number
}

interface Point extends PointX {
    y: number
}

 · 类型别名扩展类型别名

type PointX = {
    x: number
}

type Point = PointX & {
    y: number
}

 · 接口扩展类型别名

type PointX = {
    x: number
}
interface Point extends PointX {
    y: number
}

· 类型别名扩展接口 

interface PointX {
    x: number
}
type Point = PointX & {
    y: number
}

持续更新中......

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vue-typescript-import-dts 是一个用于为 Vue.js 项目中的 TypeScript 文件生成类型声明文件的工具。在 Vue.js 项目中使用 TypeScript 进行开发时,我们经常需要为一些第三方库或自定义组件编写类型声明文件,以提供更好的代码提示和类型检查。 使用 vue-typescript-import-dts 工具可以自动分析 TypeScript 文件中的导入语句,并根据导入的模块生成对应的类型声明文件。这样,在使用该模块时,IDE 或编辑器就能提供准确的代码补全和类型检查。 例如,假设我们的项目中使用了一个名为 axios 的第三方库进行网络请求,但是该库并没有提供类型声明文件。我们可以通过 vue-typescript-import-dts 工具,在我们的 TypeScript 文件中导入 axios,并正确配置工具,它将自动为我们生成一个 axios.d.ts 类型声明文件。 具体使用 vue-typescript-import-dts 的步骤如下: 1. 在项目中安装 vue-typescript-import-dts,可以使用 npm 或 yarn 命令来安装。 2. 在 TypeScript 文件中,使用 import 语句导入需要生成类型声明文件的模块。 3. 在项目根目录下创建一个 .vue-typescript-import-dts.json 配置文件,用来配置生成类型声明文件的规则。可以指定生成的声明文件的输出路径、文件名等。 4. 运行 vue-typescript-import-dts 命令,它会自动扫描 TypeScript 文件中的导入语句,并根据配置生成相应的类型声明文件。 这样,在我们编写代码时,IDE 或编辑器就可以准确地为我们提供代码补全和类型检查的功能。这对于提高开发效率和代码质量非常有帮助。 总之,vue-typescript-import-dts 是一个便捷的工具,可以自动为 Vue.js 项目中使用的第三方库或自定义组件生成类型声明文件,提供更好的代码提示和类型检查功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杜同学。

持续更新前端知识......

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

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

打赏作者

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

抵扣说明:

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

余额充值