由于TypeScript是强类型的,简单地使用if(){}来检查null和undefined听起来并不正确。
TypeScript有专门的函数或语法吗?
由于TypeScript是强类型的,简单地使用if(){}来检查null和undefined听起来并不正确。
TypeScript有专门的函数或语法吗?
当前回答
我们使用一个helper hasValue来检查null /undefined,并通过TypeScript确保不执行不必要的检查。(后者类似于TS如何抱怨if ("a" === undefined),因为它总是假的)。
始终使用这个始终是安全的,不像!val匹配空字符串,零等。它还避免了模糊==匹配的使用,这几乎总是一个坏的做法-没有必要引入异常。
type NullPart<T> = T & (null | undefined);
// Ensures unnecessary checks aren't performed - only a valid call if
// value could be nullable *and* could be non-nullable
type MustBeAmbiguouslyNullable<T> = NullPart<T> extends never
? never
: NonNullable<T> extends never
? never
: T;
export function hasValue<T>(
value: MustBeAmbiguouslyNullable<T>,
): value is NonNullable<MustBeAmbiguouslyNullable<T>> {
return (value as unknown) !== undefined && (value as unknown) !== null;
}
export function hasValueFn<T, A>(
value: MustBeAmbiguouslyNullable<T>,
thenFn: (value: NonNullable<T>) => A,
): A | undefined {
// Undefined matches .? syntax result
return hasValue(value) ? thenFn(value) : undefined;
}
其他回答
TypeScript有专门的函数或语法糖吗
TypeScript完全理解JavaScript版本== null。
通过这样的检查,TypeScript会正确地排除null和undefined。
More
https://basarat.gitbook.io/typescript/recap/null-undefined
因为TypeScript是ES6 JavaScript的类型化超集。和lodash是一个javascript库。
使用lodash检查value是否为空或未定义可以使用_.isNil()来完成。
_.isNil(value)
参数
value(*):要检查的值。
返回
(boolean):如果值为空则返回true,否则返回false。
例子
_.isNil(null);
// => true
_.isNil(void 0);
// => true
_.isNil(NaN);
// => false
Link
Lodash文档
你可能想试试
if(!!someValue)
! !
解释
第一个!将表达式转换为布尔值。
如果someValue为假则为真,如果someValue为真则为假。这可能会让人困惑。
通过添加另一个!,表达式现在如果someValue为真则为真,如果someValue为假则为假,这更容易管理。
讨论
现在,为什么我要用if (!!someValue)来麻烦自己,而像if (someValue)这样的东西会给我相同的结果?
因为! !someValue恰好是一个布尔表达式,而someValue可以是任何东西。这种表达式现在可以编写如下函数(上帝,我们需要这样的函数):
isSomeValueDefined(): boolean {
return !!someValue
}
而不是:
isSomeValueDefined(): boolean {
if(someValue) {
return true
}
return false
}
我希望这能有所帮助。
最简单的方法是使用:
import {isNullOrUndefined} from 'util';
比:
如果isNullOrUndefined (foo (!)
在TypeScript 3.7中,我们现在有可选的链接和Nullish Coalescing来同时检查null和undefined,例如:
let x = foo?.bar.baz();
这段代码将检查foo是否有定义,否则它将返回undefined
旧方法:
if(foo != null && foo != undefined) {
x = foo.bar.baz();
}
这样的:
let x = (foo === null || foo === undefined) ? undefined : foo.bar();
if (foo && foo.bar && foo.bar.baz) { // ... }
与可选的链接将:
let x = foo?.bar();
if (foo?.bar?.baz) { // ... }
另一个新特性是Nullish Coalescing,例如:
let x = foo ?? bar(); // return foo if it's not null or undefined otherwise calculate bar
老方法:
let x = (foo !== null && foo !== undefined) ?
foo :
bar();
奖金