我有一个函数检查值是否不为空,如果值为空则抛出异常。如果它不抛出并成功返回,我知道该值不可能为空。
如果不求助于 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) 我一直在看打字稿中的只读类型。可悲的是,它没有像我希望的那样起作用。例如,请参见下面的代码:
interface User{
firstName: string;
lastName: string;
}
const user: Readonly<User> = {
firstName: "Joe",
lastName: "Bob",
};
const mutableUser: User = user; //Is it possible to disallow this?
user.firstName = "Foo" //Throws error as expected
mutableUser.firstName ="Bar"//This works
Run Code Online (Sandbox Code Playgroud)
是否有可能以不允许将其分配给非只读类型的方式使用只读类型?如果不是,我可以通过其他方式解决吗?