如何使TypeScript中的非null值防止null赋值?
我理解,如何使TypeScript中的非null值防止null赋值?,typescript,Typescript,我理解,nonnull意味着将null和undefined作为类型的有效值删除,但它似乎没有按预期工作 我有以下代码: interface User { name: string; } type NonNullableUser = NonNullable<User>; let user1 : NonNullable<User> = { name: "foo"} let user2 : NonNullable<User> = nu
nonnull
意味着将null
和undefined
作为类型的有效值删除,但它似乎没有按预期工作
我有以下代码:
interface User {
name: string;
}
type NonNullableUser = NonNullable<User>;
let user1 : NonNullable<User> = { name: "foo"}
let user2 : NonNullable<User> = null // expect this to lead to a type error
用户界面{
名称:字符串;
}
类型NonNullableUser=NonNullable;
让user1:nonnull={name:“foo”}
让user2:NonNullable=null//期望这会导致类型错误
我希望让user2:nonnull=null不编译,但它仍然编译!注意,我设置了
strictNullChecks
为off,因为如果我将其设置为on,编译器会自动阻止null
赋值,并且let user2:User=null
将导致编译错误,不再需要工具类型不可为null
如果我需要为这项工作启用strictNullChecks
,那么我想知道NonNullable
是否是多余的
或者我不知道如何使用不可为空的?有什么想法吗
注意,我将strictNullChecks设置为off,因为如果我将其设置为on,
编译器会自动防止空赋值,并让user2:
User=null将导致编译错误
这是你的问题。在禁用strictNullChecks
的情况下,null
和undefined
可分配给所有内容。启用该选项后,它们只能分配给显式类型为null
或undefined
的类型。如果可以,通常建议始终启用strictNullChecks
不再需要不可为null的实用程序类型
事实并非如此。启用strictNullChecks
后,您仍然可以显式指定类型可为null,并且NonNullable
将从类型中删除null
/未定义的
e、 g
用户界面{
名称:字符串;
}
类型NullableUser=User | null;
const user1:NullableUser=null;
类型NonNullableUser=NonNullable;
常量user2:NonNullableUser=null;//类型错误
因此,如果我得到它,nonnull用于从显式创建的类型中删除null | undefined
,以使其具有null | undefined
?听起来对我不是很有用。或者也许我没有足够的想象力来理解这在哪里有用:/I我的意思是为什么不使用User
和NullableUser
类型?这是一个精心设计的示例,只是为了说明它是如何工作的。请记住,并非程序中的所有代码都将由您编写。您可能正在从第三方库导入具有可空类型的代码,并希望将其转换为不可空类型。还是谢谢你。我想我遗漏的部分是理解这只适用于联合类型。现在我需要更多的想象力,所以想想这个场景,这将是有用的:)谢谢!
interface User {
name: string;
}
type NullableUser = User | null;
const user1: NullableUser = null;
type NonNullableUser = NonNullable<NullableUser>;
const user2: NonNullableUser = null; // Type error