下面是我第一次做的一个(希望是最小的)例子:
let resolveIt: CallableFunction;
const dispatchPromise = new Promise((resolve, reject) => {
resolveIt = () => {resolve(true)};
});
resolveIt();
typescript (也许是正确的)在'resolveIt()'上给了我以下错误;':Variable 'resolveIt' is used before being assigned.
我的问题是,它 * 真的 * 没有立即定义吗?(在Promise构造函数中?)
我最大的困惑来自于我做了一个测试,看看 * 立即 * 调用它是否会导致它执行 * 第一个 * 初始赋值(空函数() => {}
),或者它是否实际上会执行赋值函数,将TEST
打印到控制台:
let resolveIt: CallableFunction = () => {};
const dispatchPromise = new Promise((resolve, reject) => {
resolveIt = () => {console.log('TEST'); resolve(true)};
});
resolveIt();
这里它实际上输出了TEST
,所以我对此措手不及,如果我在运行了一段重新赋值函数变量的代码后,根本不能访问初始函数,那么它是否应该是类型安全的,假设它总是被赋值的呢?(调用尽可能接近赋值?)
我的想法(虽然分散)是,这可能是某种"立即调用的异步代码",它似乎是立即的,但也许没有真正的保证,它是?(因此TS警告我这一点?)
我已经看过here的Q/A,它仍然让我想知道 * 为什么 * 会发生这种情况?
1条答案
按热度按时间kuarbcqp1#
正如您从我的问题https://github.com/microsoft/TypeScript/issues/42910中看到的,这是Typescript支持Promise控制流的一个既定弱点。
可以安全地假设该值已被赋值,并且常用的变通方法是
to force the issue with a !
来指示已知已赋值。这个问题中的例子读起来像这样,Assert和初始化器的第一行是“原子的”-换句话说,没有什么可以阻止myfun被设置...