我阅读了很多关于实现的 Typescript github 问题,但是在这方面工作的文档或人员很少。
我的目标是基本上让打字稿理解..
[1,2,3,4,5].filter(_ % 2).map(_ + 2)
[{name: "test"}, {name: "test2"}].map(_.name).map(_.toUpperCase())
是相同的...
[1,2,3,4,5].filter((x) => x % 2).map((x) => x + 2)
[{name: "test"}, {name: "test2"}].map((x) => x.name).map((x) => x.toUpperCase())
我要么想定义一个 SweetJS 宏,以便在编译时将所有下划线转换为 (x) => x,要么(最好)让 typescript 为我应用该转换,因为 SweetJS 相当 hacky。
(供参考https://github.com/sweet-js/sweet-core)
如果可能在编译时转换下划线,我将如何实现允许打字稿在正确的上下文 \AND\ 中至少理解下划线语法的东西。
EDIT3:(Edit3 在这里是为了便于阅读)这是我解决问题的程度,我选择不更改编译器以认为它是不同的类型,而是这样做......
declare const _: (<T>(arg: T) => T) & { [key: string]: () => any }
const test = [{name: "Shanon", age: 24}].filter(_.age);
哪个打字稿现在很满意,但它不是类型安全的,所以任何帮助都将不胜感激。
编辑:以我最低限度的编译器技能,我认为我需要打字稿来理解当我在“CallExpression”下划线的上下文中时具有非常独特的含义(AST 中的 CallExpression)。
EDIT2: 这是我需要输出的 AST 定义(类似这样),重要的是要注意,我不希望在检查类型之前转换下划线,但我想控制下划线的类型检查方式。它应该只将下划线视为 CallExpression AST 类型中的这种类型