Typescript函数返回不带null或未定义的值

Typescript函数返回不带null或未定义的值,typescript,Typescript,我正在尝试编写一个返回值的函数,或者如果该值为null或未定义,它应该返回一个默认值 函数测试条件类型(其中不可为空是)通常不能在泛型函数中提供良好的实现。您可以使用类型断言使其工作(将输入作为任何)返回 更安全的方法可能是稍微将类型切换: function test<A, B>(input: A | undefined | null, fallbackValue: B): A | B { if (input == null || input == undefined) {

我正在尝试编写一个返回值的函数,或者如果该值为null或未定义,它应该返回一个默认值

函数测试

条件类型(其中
不可为空
是)通常不能在泛型函数中提供良好的实现。您可以使用类型断言使其工作(
将输入作为任何
)返回

更安全的方法可能是稍微将类型切换:

function test<A, B>(input: A | undefined | null, fallbackValue: B): A | B {
    if (input == null || input == undefined) {
        return fallbackValue;
    } else {
        return input;
    }
}

declare var s: string | null;
let a = test(s, "") // string
功能测试(输入:A |未定义|空,回退值:B):A | B{
if(输入==null | |输入==未定义){
返回回退值;
}否则{
返回输入;
}
}
声明var s:string | null;
设a=test(“”//字符串

您的if和else分支没有交换吗?是的。在示例中修复了它,但错误是相同的:)您正在声明
input:A
,但返回一个
不可为空的
。您可能需要声明
input:nonnull
或返回
A | B
。您可以将返回类型强制转换为不可为null,但这可能是一个逻辑错误。好的。谢谢你的解决方案对我有效。但是我对nonnull的使用是否错误,或者这是typescript中的一个bug/缺失功能,或者它是否按预期工作?@Dirk这是一个限制(不确定将来是否可以寻址)
function test<A, B>(input: A | undefined | null, fallbackValue: B): A | B {
    if (input == null || input == undefined) {
        return fallbackValue;
    } else {
        return input;
    }
}

declare var s: string | null;
let a = test(s, "") // string