ts 定义类型
1. Parameters 类型工具用于提取函数的参数类型,并将其转换为一个元组类型
function add(a: number, b: number): number {
return a + b;
}
type AddParameters = Parameters<typeof add>;
// 定义一个变量,其类型为 AddParameters
const params: AddParameters = [1, 2];
// 使用提取的参数类型调用函数
const result = add(...params); // 3
console.log(result); // 输出: 3
2.枚举类型
enum Color { Red, Green, Blue }
let c: Color = Color.Green;
console.log(c); // 输出: 1
3.Unknown 类型,必须先检查
let value: unknown;
value = 42;
value = "Hello";
if (typeof value === "string") {
console.log(value.toUpperCase()); // 安全地调用字符串方法
}
4.类型别名
type Point = {
x: number;
y: number;
};
let point: Point = { x: 1, y: 2 };
5.泛型
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString");
console.log(output); // 输出: "myString"
6.联合类型
let value: string | number;
value = "hello";
value = 10;
7.交叉类型
type Person = {
name: string;
};
type Loggable = {
log: () => void;
};
type PersonWithLogging = Person & Loggable;
let person: PersonWithLogging = {
name: "Alice",
log() {
console.log(`Name: ${this.name}`);
},
};
8.类型断言
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
9.条件类型
type IsNumber<T> = T extends number ? "Yes" : "No";
type IsNumberResult1 = IsNumber<42>; // "Yes"
type IsNumberResult2 = IsNumber<string>; // "No"
8.Partial 类型,可选
type PartialPerson = Partial<Person>;
10.只读类型
interface Person {
name: string;
age: number;
address: string;
}
type ReadonlyPerson = Readonly<Person>;
// { readonly name: string; readonly age: number; readonly address: string; }
11.排除 Omit<T, K>
interface Person {
name: string;
age: number;
address: string;
}
type PersonWithoutAge = Omit<Person, 'age'>;
// { name: string; address: string; }
12.选择类型,返回新类型 Pick<T, K>
interface Person {
name: string;
age: number;
address: string;
}
type PersonNameAndAge = Pick<Person, 'name' | 'age'>;
// { name: string; age: number; }