根据参数区分返回类型

我试图输入一个接受字符串或string []并分别返回bool或bool []的函数。我已经尝试过使用泛型类型和重载,但似乎都抛出某种错误:

// generic way
function genericWay<T extends string | string[]>(val: T): T extends string ? boolean : boolean[] {
    if (typeof val === 'string'){
        return true // Type 'true' is not assignable to type 'T extends string ? boolean : boolean[]'
    }
    return [true] // Type 'true[]' is not assignable to type 'T extends string ? boolean : boolean[]'
}

const a1 = overloadWay('bbb')
const a2 = genericWay(['bbb'])
const a3 = genericWay(5333) // should throw error


// overload way
function overloadWay(val: string[]): boolean[]; // This overload signature is not compatible with its implementation signature.
function overloadWay(val: string): boolean {    
    if (typeof val === 'string'){
        return true
    }
    return [true] // Type 'boolean[]' is not assignable to type 'boolean'.
}

const b1 = overloadWay('bbb')
const b2 = overloadWay(['bbb'])
const b3 = overloadWay(5333) // should throw error

ts游乐场

  1. 从第一个示例开始-看来我的返回类型不正确?
  2. 对于重载方式,由于某种原因,它没有进行类型检查来区分两种输入类型。
西信

由于另一个答案已经提供了如何以通用方式解决警告,这需要显式的类型转换,因此您可以使用函数重载来达到相同的目标。

您的重载方式定义不正确。您需要先指定所有重载,然后函数和实现函数应在其签名中包含所有可能的输入和输出。您可以any在实现中求助,但我认为无论如何都可以避免这样做。

这是过载的方式

// overload way
function overloadWay(val: string[]): boolean[];
function overloadWay(val: string): boolean ;
function overloadWay(val: string| string[]): boolean | boolean[] {    
    if (typeof val === 'string'){
        return true
    }
    return [true]
}

// b1 is boolean
const b1 = overloadWay('bbb')

// b2 is boolean[]
const b2 = overloadWay(['bbb'])

// shows error
const b3 = overloadWay(5333) 

TS游乐场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据TypeScript中区分联合的参数自动推断返回类型

根据参数返回类型

TypeScript根据类型参数返回不同的类型

根据可变参数类型推断返回类型

根据可选参数指定返回类型

根据布尔参数使用条件返回类型

根据参数返回泛型列表类型

根据参数定义函数的返回类型

根据模板参数的类型返回值

如何区分参数类型?

如何根据参数类型转换函数的返回类型?

如何根据类方法的返回类型声明参数类型?

Typescript:如何根据参数类型获取函数的返回类型?

根据TypeScript中的参数动态生成返回类型

使用aspectJ根据调用方法的参数修改方法的返回类型

如何让打字稿根据参数返回正确的类型

Typescript-根据参数返回通用接口类型

根据提供的参数返回字典键的Typescript类型推断

C ++模板函数根据模板参数返回类型

根据参数中的属性强制执行函数的返回类型

根据TypeScript中的参数值更改返回类型

根据TypeScript中的参数在字典中定义函数的返回类型

根据Clojure中参数类型返回的规范方法

Typescript 根据参数强制函数返回类型为接口的键

根据函数的参数化类型对函数强制执行参数和返回类型限制

如何根据函数的type参数的type参数编写具有多态返回类型的函数?

是否可以根据函数参数类型的定义映射来定义函数返回类型?

TypeScript:如何根据函数参数类型设置函数返回值类型

TypeScript区分联合-区分属性类型的参数