我有一个检查值是否不为null的函数,如果值不为null则抛出该函数。如果它没有抛出并成功返回,我知道该值不可能为null。
Typescript似乎不依靠if案例就无法理解这一点。有什么办法可以做到这一点?
有关说明,请参见下面的代码
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
}
答案 0 :(得分:4)
您可以使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
}