gpt4 book ai didi

typescript - 如何让 Typescript 理解如果值为空则抛出的函数调用后值不能为空

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:23 24 4
gpt4 key购买 nike

我有一个函数可以检查值是否不为空,如果值为空则抛出异常。如果它没有抛出并成功返回,我知道该值不可能为空。

如果不求助于 if 案例,Typescript 似乎无法理解这一点。有什么办法可以实现吗?

请参阅下面的代码以进行说明:

function ensureNotNull<T>(arg: T | null, paramName: string): arg is Exclude<typeof arg, null> {
if (arg === null) {
throw new Error(`arg '${paramName}' is null`);
}

return true;
}

var value: string | null = null;

function doStuffIfValueNotNull(value: string | null) : void {
ensureNotNull<string>(value, "value");
var strLen = value.length; //Error with strictNullChecks
}

最佳答案

您可以让 ensureNotNull 返回非 null 并将其分配回去(用 *** 标记的更改):

function ensureNotNull<T>(arg: T | null, paramName: string): T {
// *** ------------------------------------------------------^
if (arg === null) {
throw new Error(`arg '${paramName}' is null`);
}

return arg; // ***
}

var value: string | null = null;

function doStuffIfValueNotNull(value: string | null) : void {
value = ensureNotNull<string>(value, "value");
// ^^^^^^^^---- ***
var strLen = value.length;
}

或者,if(但是……废话,它暗示该方法将返回,而实际上它会抛出):

function doStuffIfValueNotNull(value: string | null) : void {
if (!ensureNotNull<string>(value, "value")) return;
var strLen = value.length; //Error with strictNullChecks
}

关于typescript - 如何让 Typescript 理解如果值为空则抛出的函数调用后值不能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52629644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com