TypeScript版本: 4.0.2
搜索词:
*_1 is not defined
,通用函数,编译器错误
代码
大家好,
我发现了一些有趣的bug,似乎只在非常边缘的情况下才能工作。
当创建一个只有一个导出函数的简单文件时:
// g.ts
export const g = () => "hello world";
主文件导入该函数并以非常特定的方式使用它:
// index.ts
import { g } from "./g";
type Foo<T> = Partial<T> & { foo: number };
const f = <T, T2 extends Foo<T>>(value: T2) => ({ ...value, bar: g() });
f({ foo: 1 });
结果是我们得到了一个运行时引用错误。
有趣的是,几乎改变上述示例中的任何内容都会得到正确的行为。
此外,只需在文件末尾添加一次 g()
的调用即可修复问题。
这个bug在3.8.3版本中不存在,但在3.9.7版本和当前版本中都存在。
预期行为: 函数不会出现异常。
实际行为:ReferenceError: g_1 is not defined
** playground链接:** https://codesandbox.io/s/recursing-stallman-0fh49
相关问题: 这个问题似乎是一个相当边缘的情况,我已经搜索了类似的bug,但似乎没有一个真正符合。
2条答案
按热度按时间v64noz0r1#
I can't repro this in
tsc
; it's possiblecodesandbox.io
has a bug in it. What compiler settings are you using?ih99xse12#
我能够在
codesandbox.io
之外复制这个问题,但只能使用bundler - parcel.js或webpack,结果相同。在webpack中,我也尝试了两种最流行的类型脚本加载器(ts-loader和awesome-typescript-loader),它们都生成了错误的代码。我设法只使用默认的编译器选项来解决这个问题。这可能不是编译器的问题,而是bundler/loader的问题,我真的无法确定,但将TypeScript版本更改为3.8.3确实解决了问题,这一点很有趣。