- 枚举类型
枚举的特性就是将一组可能出现的值,列举出来,定义到类型中去
enum Direction {
LEFT,
RIGHT,
TOP,
BOTTOM
}
console.log(Direction['0']); // LEFT
console.log(Direction['LEFT']); // 0
- 枚举类型的值
枚举类型默认是有值的,当给枚举某个值的时候,这时候会进行递增。
enum Direction {
LEFT = 0,
RIGHT,
TOP,
BOTTOM
}
console.log(Direction['RIGHT']); // 1
enum Direction {
LEFT,
RIGHT,
TOP = 'TOP',
BOTTOM = 'BOTTOM'
}
console.log(Direction[0]); // LEFT
- 认识泛型
泛型实际上就是实现类型的参数化。
如果定义参数为any类型的话,虽然能够实现,但是传入的number类型,希望返回的不是any类型,同样是number类型。因此,需要先在函数中捕获到参数的类型是number,并且使用它来作为返回值的类型。
function foo<Type>(arg: Type): Type {
return arg;
}
const num = foo(111);
console.log(num); // 111
const str = foo('abc');
console.log(str); // abc
- 多个泛型的基础使用
在平常的开发中:
- T:Type的缩写、类型
- K、V:key和value的缩写、键值对
- E:Element的缩写、元素
- O:Object的缩写、对象
// 多个泛型的基础使用
function foo<K, V>(key: K, value: V) {
return [key, value];
}
const keys = foo('name', 'abc');
- 泛型接口的定义
在开发中需要去定义泛型接口
interface Info<T> {
data: T,
list: T[],
getValue: (value: T) => T
}
const infos: Info<number> = {
data: 20,
list: [1, 2, 3, 4, 5],
getValue: (value: number) => {
return 10;
}
}
console.log(infos);
- 泛型类
class Info<T> {
data: T
value: T
constructor(data: T, value: T) {
this.data = data;
this.value = value;
}
}
const stu1 = new Info(10, 20);
const stu2: Info<string> = new Info('123', 'abc');
console.log(stu1, stu2);
- 泛型约束
如果传入的数据存在某些共性,但这些数据类型又不相同
interface Length {
length: number;
}
function getLength<T extends Length>(data: T): number {
return data.length;
}
const str = 'get the current data length';
console.log(getLength(str));
const list = [1, 2, 3, 4, 5, 6];
console.log(getLength(list));
- 模块化开发
export function add(num1: number, num2: number) {
return num1 + num2;
}
export function sub(num1: number, num2: number) {
return num1 - num2;
}
- 命名空间
命名空间也称之为内部模块,主要的目的是将一个模块内部再进行作用域的划分,防止一些命名冲突的问题。
export namespace Time {
export function getValue(time: string): string {
return new Date().toLocaleDateString();
}
}
export namespace Price {
export function getValue(price: number): number {
return 20;
}
}
- 类型的查找
typescript中 .d.ts文件是用作类型的声明(declare)的,它仅仅用来做类型的检测,告知typescript有哪些类型。
typescript查找类型声明的路径:
- 内置类型声明
- 外部定义的类型声明
- 自己定义的类型声明
- 内置类型声明
内置类型声明都是typescript自带的,内置了javascript运行时的一些标准化的API的声明文件,比如Math、Date等内置类型
内置类型声明通常在我们安装typescript的环境中会带有的;
phttps://github.com/microsoft/TypeScript/tree/main/lib
- 外部定义类型声明和自定义声明
外部类型声明是使用一些库(比如第三方库)时,需要的一些类型声明。
第三方库通常有两种类型声明方式:
- 方式一:库中进行类型声明(编写.d.ts文件)
- 方式二:通过社区的公有库存放类型声明文件
该库的GitHub地址:https://github.com/DefinitelyTyped/DefinitelyTyped/
该库查找声明安装方式的地址:https://www.typescriptlang.org/dt/search?search=