type BandType<T,U>=Textends U ?never :T
function method<T>(x:BandType<T, number>){}
method('asdfasfd');
method({});
method(123) //报错
Partial<T>: 所有属性变为可选Required<T>: 所有属性变为必需Readonly<T>: 所有属性变为只读Record<K, V>: 键类型为 K,值类型为 V 的对象Pick<T, K>: 从 T 中选择属性 KOmit<T, K>: 从 T 中排除属性 KExclude<T, U>: 从 T 中排除可赋值给 U 的类型Extract<T, U>: 从 T 中提取可赋值给 U 的类型NonNullable<T>: 排除 null 和 undefinedParameters<T>: 函数参数类型ReturnType<T>: 函数返回类型TypeScript 提供了一些常用的内置工具类型,用于对已有类型进行变换和组合,提升类型系统的灵活性和表达能力。常见的工具类型如下:
将类型 T 的所有属性变为可选。
interface User {
name: string
age: number
}
type PartialUser = Partial<User>
// 等价于:{ name?: string; age?: number }
将类型 T 的所有属性变为必选。
type RequiredUser = Required<PartialUser>
// 等价于:{ name: string; age: number }
将类型 T 的所有属性变为只读。
type ReadonlyUser = Readonly<User>
// 等价于:{ readonly name: string; readonly age: number }
从类型 T 中挑选部分属性组成新类型。
type NameOnly = Pick<User, 'name'>
// 等价于:{ name: string }
从类型 T 中排除某些属性组成新类型。
type WithoutAge = Omit<User, 'age'>
// 等价于:{ name: string }
构造一个以 K 为键、T 为值的对象类型。
type UserMap = Record<string, User>
// 等价于:{ [key: string]: User }
从 T 类型中排除 U 类型的成员。
type T = 'a' | 'b' | 'c'
type T1 = Exclude<T, 'a' | 'b'>
// 结果:'c'
从 T 类型中提取 U 类型的成员。
type T2 = Extract<T, 'a' | 'b'>
// 结果:'a' | 'b'
去除类型 T 中的 null 和 undefined。
type T3 = string | number | null | undefined
type T4 = NonNullable<T3>
// 结果:string | number
获取函数类型 T 的返回值类型。
function fn(): number {
return 123
}
type FnReturn = ReturnType<typeof fn>
// 结果:number
获取函数类型 T 的参数类型组成的元组。
function greet(name: string, age: number): void {}
type GreetParams = Parameters<typeof greet>
// 结果:[string, number]
获取构造函数类型 T 的参数类型组成的元组。
class Person {
constructor(name: string, age: number) {}
}
type PersonParams = ConstructorParameters<typeof Person>
// 结果:[string, number]
获取构造函数类型 T 的实例类型。
type PersonInstance = InstanceType<typeof Person>
// 结果:Person