TypeScript 变量
命令
tsc test.ts # 编译 TS
tsc test.ts -wtach # 自动编译 TS,在有 TS 配置文件的文件夹下,会按照配置文件编译 TS
tsc test.ts -w # 自动编译 TS 简写
tsc --init # 生成 TS 配置文件
类型推断
TS 会根据初始化时的赋值自动确定变量类型
let str = 'abc';
str = 10;
类型注解
基础
使用 :
来主动确定变量类型
let v1: string = 'abc'; // 字符串
let v2: number = 10; // 数字
let v3: boolean = true; // 布尔
let nu: null = null; // 空
let un: undefined = undefined; //未定义
let v4: string | null = null; // 多个基层类型
let v5: 1 | 2 | 3 = 3; // 指定具体值
数组
let arr: number[] = [1, 2, 3]; // 数组
let arr1: Array<string> = ['a', 'b', 'c']; // 数组
元组
let t1: [number, string, number?] = [1, '1', 2]; //元组,规定数组内每个位置类型的数组。?代表设置为可选项
函数
let afA: (a: number, b: number) => number = (x: number, y: number): number => {
return x + y;
};
类型断言
使用 as
主动确定返回类型
let numArr = [1, 2, 3];
const result = numArr.find((item) => item > 2) as number; // 应该做踏空处理,此处只是为了演示
result * 5;
let afC: unknown = 'AAA';
let afD: string = afC as string;
let afF: number = 123; // 将变量断言为常量
let afE: number = 123 as const; // 将变量断言为常量
const afG = [afD, afE] as const; // 将数组断言为只读元组
const afJ = <const>[afD, afE]; // 将数组断言为只读元组的另一种写法
const afH = {
name: afE,
}; // 将对象断言为内容确定的只读对象
解构中使用 as const
function afFun() {
let a = 'AAA';
let b = (x: number, y: number): number => x + y;
return [a, b];
}
const [afI, afK] = afFun();
const afL = afK as Function;
afL(18, 2);
function bafFunB() {
let a = 'AAA';
let b = (x: number, y: number): number => x + y;
return [a, b];
}
const [afBI, afBK] = bafFunB() as [string, Function];
afBK(12, 2);
function bafFunC() {
let a = 'AAA';
let b = (x: number, y: number): number => x + y;
return [a, b] as [string, Function];
}
const [afCI, afCK] = bafFunC();
afCK(12, 2);
function bafFunD() {
let a = 'AAA';
let b = (x: number, y: number): number => x + y;
return [a, b] as const;
}
const [afDI, afDK] = bafFunD();
afDK(12, 2);
非空断言
const afA: HTMLDivElement = document.querySelector('.af') as HTMLDivElement;
const afB: HTMLDivElement = document.querySelector('.af')!;
any
和 unknown
类型
关于 any
根据上下文变化,unknown
是独立的类型。
let afA: any = 'doc.alrcly.com'; // 任意值
let afB: any[] = ['a', 1, null]; // 数组内的元素任意
let afC: unknown = 'AAA'; // 定义一个 unknown 类型
let afD: string = afC as string; //afD 是字符串,所以是不能直接接收 unknown 类型的
let afE: string = 'AAA'; // unknown 可以通过断言变成指定类型
let afF: number = afE as unknown as number; // unknown 可以是类型的桥梁
索引签名
在 TypeScript 中,索引签名(Index Signature)用于描述那些属性名和属性值类型不确定的对象。它允许你定义一个对象,该对象可以有任意数量的属性,并且这些属性的名称和类型可以在编译时不确定。
索引签名的语法如下:
{
[key: KeyType]: ValueType;
}
例如:
type User = {
name: string;
age: number;
show(): string;
[key: string]: any;
};
type
关键字
关于 - type 可以用来定义基本类型、对象类型、联合类型、交叉类型等。
- type 不支持声明合并,重复定义会报错。
- type 也可以使用
implements
让类实现。 - 实际使用中可以用接口代替
type
//基本类型
type afUserNameA = string;
//联合类型
type afUserNameB = string | number;
//对象类型
type User = {
name: string;
age: number;
show(): string;
[key: string]: any;
};
// 交叉类型
type Person = {
name: string;
age: number;
};
type Employee = {
employeeId: number;
department: string;
};
type EmployeeDetails = Person & Employee;
const employee: EmployeeDetails = {
name: "Alice",
age: 30,
employeeId: 12345,
department: "Engineering"
};