使用Typescript 2.8.3,我不明白为什么以下代码无法获取在if块中定义了params的原因。
const testFunction = (params?: string) => {
const paramIsDefined = typeof params !== 'undefined';
if (paramIsDefined) {
console.log(params.length);
}
};
我收到此错误: TS2532:params变量的console.log行上的对象可能是'undefined'。
此代码有效:
const testFunction = (params?: string) => {
if (typeof params !== 'undefined') {
console.log(params.length);
}
};
我不明白/做错什么了吗?
答案 0 :(得分:1)
构造:
if (typeof params !== 'undefined') {
console.log(params.length);
}
是类型防护,因此会影响params
的类型。
if (paramIsDefined)
只是一个if
语句,确实要检查的布尔值来自类型检查,但是编译器根本不遵循该值。如果您想将params
形式的string|undefined
的类型缩小到string
,则需要使用类型保护构造或使用断言