TypeScript中的可选参数是否可以为null?
根据,当在TypeScript中启用严格的null检查时,您不能将TypeScript中的可选参数是否可以为null?,typescript,undefined,optional,nullable,Typescript,Undefined,Optional,Nullable,根据,当在TypeScript中启用严格的null检查时,您不能将null或undefined分配给变量,除非它与union一起被明确允许 //所需值 let-req:字符串; req=“某物”//好啊 req=null;//错误 req=未定义;//错误 //可空值 设nbl:string | null; nbl=“某物”//好啊 nbl=null;//好啊 nbl=未定义;//错误 但是TypeScript中的可选值是否允许null //可选值 让我们选择?:字符串;//(实际上是无效的,
null
或undefined
分配给变量,除非它与union一起被明确允许
//所需值
let-req:字符串;
req=“某物”//好啊
req=null;//错误
req=未定义;//错误
//可空值
设nbl:string | null;
nbl=“某物”//好啊
nbl=null;//好啊
nbl=未定义;//错误
但是TypeScript中的可选值是否允许null
//可选值
让我们选择?:字符串;//(实际上是无效的,因为可选类型不能用于变量声明,但这不是重点,所以假设我们正在处理函数参数或其他东西)
opt=“某物”//好啊
opt=null;//好啊错误?
opt=未定义;//好啊
或者是
opt?:字符串;
相当于
opt:string |未定义;
因此不允许像?
let d?:string建议的那样使用null
将类型声明为string | undefined
这是因为
undefined
是JS变量的默认值。编辑:重要注意事项正如昆汀C在下面的评论中指出的那样,这里列出的行为只有在启用严格空值检查时才会出现:“strictNullChecks”:true
在tsconfig.json
中
类型
null
和undefined
作为单独的类型处理。可选类型是特殊的,也允许在函数调用中省略参数
1。如果没有联合或可选,则除了类型本身之外,不允许任何内容。
function foo(bar: string | undefined) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // Error
函数foo(条:字符串){
控制台信息(条);
}
福(“你好,世界!”);//好啊
foo(空);//错误
foo(未定义);//错误
foo()//错误
2。要另外允许null
,可以与null
建立联合。
function foo(bar: string | undefined) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // Error
函数foo(条:字符串| null){
控制台信息(条);
}
福(“你好,世界!”);//好啊
foo(空);//好啊
foo(未定义);//错误
foo()//错误
3。允许未定义
的工作原理类似。请注意,参数不能省略或null
function foo(bar: string | undefined) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // Error
4。您也可以同时允许这两种情况,但仍必须给出参数。
function foo(bar: string | undefined) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // Error
函数foo(条:字符串| null |未定义){
控制台信息(条);
}
福(“你好,世界!”);//好啊
foo(空);//好啊
foo(未定义);//好啊
foo()//错误
5。使用optional,您可以省略参数,或者传递未定义的
,但不能传递null
function foo(bar: string | undefined) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // Error
函数foo(条形?:字符串){
控制台信息(条);
}
福(“你好,世界!”);//好啊
foo(空);//错误
foo(未定义);//好啊
foo()//好的
6。要允许所有三种特殊情况,可以将可选和null
组合使用。
function foo(bar: string | undefined) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // Error
函数foo(bar?:字符串| null){
控制台信息(条);
}
福(“你好,世界!”);//好啊
foo(空);//好啊
foo(未定义);//好啊
foo()//好的
另外,optional仅在参数或其他类型声明(如接口)中可用,而不在正则变量上可用。因为赋值时省略变量的值是没有意义的 因此,
let d?:字符串;
将毫无意义,并导致编译错误。对于像我这样没有正确阅读问题的人,这里列出的行为仅在启用严格的空检查时出现。“strictNullChecks”:在tsconfig.json中为true如果您不正确,
let d?:字符串在TypeScript中无效。看见