typescript Infer
时间: 2024-02-10 15:47:42 浏览: 124
TypeScript的`infer`关键字用于在条件类型中推断类型参数。它允许我们根据条件推断出类型参数的具体类型。
在类型别名、接口、函数等地方,我们可以使用`infer`来定义一个类型参数,并且在条件类型中使用这个参数进行类型推断。
下面是一个使用`infer`的示例:
```typescript
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
function getString(): string {
return 'Hello';
}
type MyReturnType = ReturnType<typeof getString>; // MyReturnType的类型为string
```
在上面的例子中,`ReturnType`是一个条件类型,它判断传入的类型参数`T`是否为函数类型。如果是函数类型,它使用`infer R`来推断出函数返回值的类型,并将其赋值给`R`。如果不是函数类型,则返回`never`类型。
通过调用`getString`函数并将其类型作为参数传递给`ReturnType`,我们可以推断出`MyReturnType`的类型为`string`。
这就是`infer`关键字在TypeScript中的使用方式。它在条件类型中非常有用,可以根据条件对类型参数进行推断。
相关问题
typescript infer作用
TypeScript 中的 `infer` 关键字是用来声明类型推断变量的。使用 `infer` 关键字可以方便地从一个类型中提取出一个新的类型,这样就可以在类型谓词中使用这个新的类型了。
例如,你可以这样声明一个类型推断变量 `T`:
```
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
```
在这个例子中,`T` 是一个类型变量,表示待查找的对象的类型。`K` 则是一个类型推断变量,它的类型是 `T` 中的属性名的子集。
你可以这样使用这个函数:
```
const obj = { a: 1, b: 2, c: 3 };
const value = getProperty(obj, 'a'); // value 的类型是 number
```
在这个例子中,`T` 的类型被推断为 `{ a: number, b: number, c: number }`,而 `K` 的类型被推断为 `'a'`。因此,`value` 的类型被推断为 `number`。
typescript的infer
`infer` 是 TypeScript 中的一个关键字,用于在条件类型中推断类型变量。它通常与`extends`关键字一起使用。
在 TypeScript 中,我们可以通过条件类型来根据某个类型的特性来推断出另一个类型。`infer` 关键字用于声明一个待推断的类型变量,并将其与条件类型中的其他类型进行比较。
下面是一个示例:
```typescript
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
function foo(): string {
return "Hello";
}
type FooReturnType = ReturnType<typeof foo>; // 推断出 FooReturnType 为 string 类型
```
在上面的例子中,我们定义了一个泛型类型 `ReturnType`,它接受一个函数类型 `T` 作为参数。通过使用 `T extends (...args: any[]) => infer R`,我们将函数类型 `T` 与函数返回值类型 `R` 进行比较。如果条件成立,即 `T` 是一个函数类型,那么 `R` 将被推断为函数的返回值类型。否则,返回 `never` 类型。
通过使用 `infer` 关键字,我们可以方便地从已知类型中推断出其他类型,并在 TypeScript 中进行类型转换和操作。
阅读全文