infer typescript
时间: 2023-09-04 14:13:52 浏览: 86
在TypeScript中,`infer`是一个关键字,它通常与`extends`关键字一起使用,用于在条件类型中推断类型。`infer`关键字表示将要推断的类型,并且可以在三元表达式的True部分引用。例如,可以使用`infer`关键字来推断函数的返回类型。比如,`ReturnType<T>`类型可以推断出函数`T`的返回类型。如果`T`是一个函数类型,则返回类型为`infer R`,否则返回类型为`any`。例如,如果有一个函数类型`func`,则可以使用`ReturnType<func>`来推断函数的返回类型,结果为`number`。同样,如果有一个变量类型`variable`,则`ReturnType<variable>`的结果为`string`。[2][3]
相关问题
typescript Infer
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`。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)