typescript 条件返回类型
条件返回类型是一种在TypeScript中的高级类型技巧。通过使用条件类型,可以根据不同的条件来确定返回的类型。
在TypeScript中,条件类型的语法如下:
```typescript
T extends U ? X : Y
```
其中,`T`是待检查的类型,`U`是待比较的类型,如果`T`可以赋值给`U`,则返回`X`类型;反之,则返回`Y`类型。
条件返回类型的好处是可以根据不同的条件来处理类型之间的差异,从而实现更加灵活和安全的类型检查。下面通过几个示例来进一步说明条件返回类型的使用。
**示例1:根据参数类型确定返回类型**
假设有一个函数`getLength`,接收一个参数`value`,并根据`value`的类型来判断返回的类型是`number`还是`string`。可以使用条件类型来实现该功能:
```typescript
type GetLength<T> = T extends string ? number : T extends number ? string : never;
function getLength<T>(value: T): GetLength<T> {
if (typeof value === 'string') {
return value.length;
} else if (typeof value === 'number') {
String();
}
throw new Error('Unsupported type');
}
const len1 = getLength('hello'); //类型为number
const len2 = getLength(123); //类型为string
```
在上述示例中,使用了`GetLength`条件类型来根据`T`的类型来确定返回的类型。当`T`是`string`类型时,返回`number`类型;当`T`是`number`类型时,返回`string`类型;否则返回`never`类型。
**示例2:根据属性存在与否确定返回类型**
还可以使用条件返回类型来根据对象的属性是否存在来确定返回的类型。例如,有一个函数`getProperty`,接收一个对象`obj`和一个属性名`key`,如果对象具有该属性,返回该属性的类型;如果对象没有该属性,则返回`undefined`。可以使用条件类型来实现该功能:
```typescript
type GetProperty<T, K> = K extends keyof T ? T[K] : undefined;
function getProperty<T, K extends keyof T>(obj: T, key: K): GetProperty<T, K> {
if (key in obj) {
return obj[key];
}
return undefined;
}
const person = { name: 'John', age: 25 };
const name = getProperty(person, 'name'); //类型为string
const age = getProperty(person, 'age'); //类型为number
const address = getProperty(person, 'address'); //类型为undefined
```
在上述示例中,使用了`GetProperty`条件类型来在`T`对象中查键`K`,如果存在该键,则返回对应的值的类型;否则返回`undefined`类型。
**示例3:条件类型嵌套**
typescript 字符串转数组条件返回类型可以嵌套使用,以实现更加复杂的类型判断。例如,有一个函数`filterArray`,接收一个数组`arr`和一个条件`cond`,返回符合条件的数组。可以使用嵌套的条件类型来实现该功能:
```typescript
type FilterArray<T, U> = T extends (infer R)[] ? R extends U ? R : never : never;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论