gpt4 book ai didi

typescript - 为什么 TypeScript 在赋值之前没有捕捉到正在使用 const ?

转载 作者:搜寻专家 更新时间:2023-10-30 20:34:57 25 4
gpt4 key购买 nike

我有一个非常简单的示例,其中 TypeScript (3.5.1) 适用于代码,但在运行时会立即抛出错误。

我认为这里的问题是,value 本质上是声明,但在 getValue 运行之前未初始化。这在我看来很不直观,但我明白这就是 JS 的工作原理。

但是,为什么TS在这么简单的例子中检测不到这个问题呢?由于 value 是一个常量,在我看来 TS 应该能够准确确定它何时设置并预测此代码崩溃。

console.log(getValue());

const value = "some string";

function getValue() {
return value;
}

在没有函数调用的第二个例子中,TS 确实捕捉到变量在赋值之前被使用:

console.log(value);
const value = "some string";

TSLint 的 no-use-before-declare 似乎也不适用。

假设 TS/linting 无法捕捉到这一点,是否有最佳实践可以应用到初始示例中来避免这种崩溃?例如,“始终在文件顶部声明模块级常量”。

最佳答案

您可以启用 tslint 的 only-arrow-functions然后将您的 function getValue() 替换为

const getValue = function(): string {
return value;
}

甚至

const getValue = (): string => value;

此时你的第一行将是一个编译器错误:

Block-scoped variable 'getValue' used before its declaration

关于typescript - 为什么 TypeScript 在赋值之前没有捕捉到正在使用 const ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56368830/

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