在无法推断类型信息的情况下,如何配置编译器隐式使用"unknown"而不是"any&quo



有一个编译器选项noImplicitAny,它是这样描述的:

在某些不存在类型注释的情况下,当TypeScript无法推断变量的类型时,它将回退到any类型。

这可能会导致遗漏一些错误,例如:

function fn(s) {
// No error?
console.log(s.subtr(3));
}
fn(42);

打开noImplicitAny,但是只要TypeScript推断出any:,它就会发出错误

function fn(s) { /*
~
Parameter 's' implicitly has an 'any' type. */
console.log(s.subtr(3));
}

我想要的是将编译器配置为在上述情况下无法推断类型信息的情况下更严格地执行操作:我希望它在这些站点中的每一个使用unknown(而不是any(。还有另一个编译器选项useUnknownInCatchVariables,它是这样描述的:

TypeScript 4.0中添加了支持,允许将catch子句中变量的类型从any更改为unknown。允许类似以下代码:

try {
// ...
} catch (err) {
// We have to verify err is an
// error before using it as one.
if (err instanceof Error) {
console.log(err.message);
}
}

这种模式确保错误处理代码变得更加全面,因为您不能提前保证抛出的对象是error子类。启用标志useUnknownInCatchVariables后,就不需要额外的语法(: unknown(或linter规则来强制执行此行为。

但是,这仅适用于catch子句中的exception参数。

如何将编译器配置为在所有情况下都回退到unknown

目前,不可能启用这种隐含的更严格的类型安全,但在ms/TS#27265中建议使用implicitUnknown选项。

相关内容

  • 没有找到相关文章

最新更新