我编写了以下代码,但返回值出错

function test_fn<T> (arg: T): T extends string | number ? boolean : number
{
    if(typeof arg === "string" || typeof arg === "number")
    {
        return true
    }
    return 1
}

错误消息为: TS2322:不可将类型""True""赋值给类型""T扩展字符串|数字?布尔:数字"".""

enter image description here

我觉得我的写作应该正确地进行类型推断,但它没有.我可以做些什么来消除这种类型错误?

推荐答案

请判断解决上述问题的以下代码片段.

declare const calc: (expr: string, options?: any) => any;

type StrOrNum = string | number;

type CalcWrapReturnType = StrOrNum | ((expr: StrOrNum) => StrOrNum) | null

function calc_wrap<T extends unknown>(expr_or_data: T, data?: any): CalcWrapReturnType {
    const _fill_data: any[] = [];
    const options = { _error: "_" };

    if(typeof expr_or_data === 'string') {
        return calc( expr_or_data, {
            _fill_data,
            ...options
        } ) as StrOrNum;
    }
 return typeof expr_or_data === 'string' ? ( expr: StrOrNum ): StrOrNum => calc( expr as string, _fill_data ) : null;
}

我的实现简单地忽略了T的类型是否为数字.也许您可以将数字转换为字符串,并在需要时使用它.

Typescript相关问答推荐

排序更改数组类型

如何使用TypScript和react-hook-form在Next.js 14中创建通用表单组件?

VS代码1.88.0中未出现自动导入建议

我应该使用什么类型的React表单onsubmit事件?

Angular 行为:属性类型从SignalFunction更改为布尔

使某些(嵌套)属性成为可选属性

如何在TypeScrip中正确键入元素和事件目标?

带下拉菜单的Angular 响应式选项卡

如何在react组件中使用doctype和html标签?

扩展参数必须具有元组类型或传递给REST参数

Angular:ngx-echart 5.2.2与Angular 9集成错误:NG 8002:无法绑定到选项,因为它不是div的已知属性'

如何创建由空格连接的多个字符串的类型

如何在打字角react 式中补齐表格组

如何为带有参数的函数类型指定类型保护?

使用&reaction测试库&如何使用提供程序包装我的所有测试组件

什么';是并类型A|B的点,其中B是A的子类?

如何在TypeScript中声明逆变函数成员?

Angular另一个组件的nativeelement未定义

错误:仅允许在‘使用服务器’文件中导出异步函数

如何从 Select 元素中删除选项