目录
当我们在编写 TypeScript 代码时,有时候需要根据某些条件来确定类型的行为。比如,在函数中根据不同的输入类型返回不同的输出类型,或者根据一个变量的值来决定返回的类型是一个数组还是一个对象。这时候,我们就可以使用 TypeScript 中的条件类型来实现这样的行为。
一,基础用法
下面我来举几个例子,以便更好地理解条件类型的概念和用法。
1.1 根据类型参数判断返回类型
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
const foo = (): string => {
return "hello";
}
const bar = (): number => {
return 42;
}
const str: ReturnType<typeof foo> = "hello"; // string
const num: ReturnType<typeof bar> = 42; // number
在这个例子中,我们定义了一个 ReturnType<T>
类型,它接受一个泛型类型参数 T
。这个类型参数代表一个函数类型,我们通过 T extends (...args: any[]) => infer R
这个条件语句来判断 T
是否是一个函数类型,并提取其返回值类型 R
。如果 T
是一个函数类型,则返回 R
类型,否则返回 never
类型。
然后,我们定义了两个函数 foo
和 bar
,分别返回字符串和数字。我们使用 typeof
操作符来获取这两个函数的类型,并通过 ReturnType<typeof foo>
和 ReturnType<typeof bar>
来获取它们的返回类型。
最后,我们声明了两个变量 str
和 num
,并分别将它们声明为 ReturnType<typeof foo>
和 ReturnType<typeof bar>
类型。这样就可以根据不同的函数类型来确定返回类型。
type IsOptional<T> = T extends {
[k: string]: infer