gpt4 book ai didi

typescript - TypeScript 中的 optional 参数可以为 null 吗?

转载 作者:行者123 更新时间:2023-12-04 17:14:32 26 4
gpt4 key购买 nike

根据this article ,当在 TypeScript 中启用严格的空检查时,您不能分配 nullundefined到一个变量,除非它被联合明确允许。

// required value
let req: string;
req = "Something"; // OK
req = null; // Error
req = undefined; // Error

// nullable value
let nbl: string | null;
nbl = "Something"; // OK
nbl = null; // OK
nbl = undefined; // Error

但是是 null允许在 TypeScript 中的 optional 值中使用?

// optional value
let opt?: string; // (actually invalid, as optional types cannot be used for variable declarations, but that's not the point, so imagine we are dealing with function parameters or something)
opt = "Something"; // OK
opt = null; // OK? Error?
opt = undefined; // OK

或者是

opt?: string;

相当于

opt: string | undefined;

因此不允许 null就像 Microsoft's Coding guidelines 推荐的一样?

最佳答案

编辑:重要提示正如 Quentin C 在下面的评论中指出的那样,这里列出的行为仅在启用严格的空检查时才会出现:"strictNullChecks": truetsconfig.json .

类型 nullundefined作为单独的类型处理。 optional 类型是特殊的,也允许在函数调用中省略参数。
1. 如果没有联合或 optional ,则除了类型本身之外什么都不允许。

function foo(bar: string) {
console.info(bar);
}

foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // Error
foo() // Error
2. 额外允许null , 与 null 的联合可以制作。
function foo(bar: string | null) {
console.info(bar);
}

foo("Hello World!"); // OK
foo(null); // OK
foo(undefined); // Error
foo() // Error
3.允许undefined工作原理类似。请注意,参数不能省略或 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 | null | undefined) {
console.info(bar);
}

foo("Hello World!"); // OK
foo(null); // OK
foo(undefined); // OK
foo() // Error
5. 使用 optional 你可以省略参数,或者传递 undefined , 但不是 null .
function foo(bar?: string) {
console.info(bar);
}

foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // OK
6. 允许所有三种特殊情况, optional 和null可以组合。
function foo(bar?: string | null) {
console.info(bar);
}

foo("Hello World!"); // OK
foo(null); // OK
foo(undefined); // OK
foo() // OK

此外, optional 仅可用于参数或其他类型声明,例如接口(interface),不能用于常规变量。因为在分配变量时忽略变量的值是没有意义的。
因此,
let d?: string;
将毫无意义并导致编译错误。

关于typescript - TypeScript 中的 optional 参数可以为 null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57243477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com