Typescript学习笔记--进阶篇

这篇博客详细介绍了TypeScript的高级特性,包括类型别名的使用,字符串字面量类型的约束,元组的定义与操作,枚举的多种用法(手动赋值、常数项和计算所得项、常数枚举、外部枚举)以及类的概念与实现,深入探讨了泛型的多种应用场景(简单例子、多个类型参数、泛型约束、泛型接口和泛型类)。此外,还讲解了声明合并,涉及函数、接口和类的合并规则。
摘要由CSDN通过智能技术生成

1. 类型别名

类型别名用来给一个类型起个新名字。

使用 type 创建类型别名。

类型别名常用于联合类型。

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n : NameOrResolver): Name {
   
    if (typeof n === 'string') {
   
        return n;
    } else {
   
        return n();
    }
}

2. 字符串字面量类型

字符串字面量类型用来约束取值只能是某几个字符串中的一个。

类型别名 与 字符串字面量类型 都是使用 type 进行定义的。

type EventNames = 'click' | 'scroll' | 'mousemove';
function handleEvent(ele: Element, event: EventNames){
   
    // ...
}
// 使用 type 定义了一个字符串字面量类型 EventNames,它只能取三种字符串中的一种。

3. 元组

数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。

注意:在定义时,就应该初始化。当赋值或访问一个已知索引的元素时,会得到正确的类型。

// 定义元组
let tp: [string, number] = ['tuple', 22];
// 赋值
tp[0] = 'sssss';
tp[1] = 25;
// 获取元素
tp[0]
tp[1]

当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型。就是说添加其他类型的元素会报错。

比如在上面定义的元组中进行以下操作 tp.push(true) 就会报错,因为 tp 的类型只能是 string 或者 number。

4. 枚举

枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。

enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat};

枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射。

enum Days {
    Sun, Mon, Tue, Wed, Thu, Fri, Sat};

// 枚举值到枚举名进行反向映射
console.log(Days['Wed'] === 3); // true
console.log(Days[0] === 'Sun'); // true

4.1 手动赋值

我们可以给枚举项手动赋值,未手动赋值的枚举项会接着上一个枚举项递增。如果未手动赋值的枚举项与手动赋值的重复了,TypeScript是不会察觉到这一点的,后面的项会覆盖前面的项。

手动赋值的枚举项也可以为小数或负数,此后续未手动赋值的项的递增步长仍为 1,在小数或负数的基础上加 1

enum Days {Sun = 7, Mon = 1, Tue, Wed, Thu, Fri, Sat}; // 未手动赋值的枚举项会接着上一个枚举项递增

4.2 常数项和计算所得项

枚举项有两种类型:常数项(constant member)和计算所得项(computed member)。

// 常数项,默认第一项为0;
// 也可手动赋值第一项,后面的自递增。
enum Color {
   
    Red = 1,
    Green,
    Blue
};

// 计算所得项
enum Color {
   
    Red,
    Green,
    Blue = 'blue'.length
};
// 如果紧接在计算所得项后面的是未手动赋值的项,那么它就会因为无法获得初始值而报错。
// 因此计算所得项可以放在后面,否则其后面的项要手动赋值。
// 也就是说上面定义的 Color 枚举中的 Blue 后面还有新的项,其需要重新手动赋值,否则报错

4.3 常数枚举

常数枚举是使用 const enum 定义的枚举类型。

常数枚举与普通枚举的区别:它会在编译阶段被删除,并且不能包含计算成员。若包含计算成员,则会在编译阶段报错。

const enum Directions {
   
    Up,
    Down,
    Left,
    Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right];

// 编译结果:
var directions = [0/*Up*/, 1/*Down*/, 2/*Left*/, 3/*Right*/];

4.4 外部枚举

外部枚举(Ambient Enums)是使用 declare enum 定义的枚举类型。

declare 定义的类型只会用于编译时的检查

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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值