我有一个函数检查值是否不为空,如果值为空则抛出异常。如果它不抛出并成功返回,我知道该值不可能为空。
如果不求助于 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
}
Run Code Online (Sandbox Code Playgroud)
您可以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;
}
Run Code Online (Sandbox Code Playgroud)
或者,if(但是……哎呀,它表明该方法将返回,而实际上它会抛出):
function doStuffIfValueNotNull(value: string | null) : void {
if (!ensureNotNull<string>(value, "value")) return;
var strLen = value.length; //Error with strictNullChecks
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |