Я много читал о github-проблемах Typescript, касающихся реализации, но в этой области мало документации или людей, работающих в этой области.
Моя цель состоит в том, чтобы в основном машинопись понимала это ..
[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 во время компиляции, либо (желательно), чтобы машинописный текст применил это преобразование для меня, поскольку SweetJS довольно хакерская.
(Для справки https://github.com/sweet-js/sweet-core)
Как бы я реализовал что-то, что позволяет машинописному тексту как минимум понимать синтаксис подчеркивания в правильном контексте \ И \, если это возможно, преобразовывать подчеркивания во время компиляции.
РЕДАКТИРОВАТЬ3: (Edit3 здесь для удобочитаемости) это, как далеко я ушел с проблемой, я решил не менять компилятор, чтобы думать, что это другой тип, но вместо этого делать это ...
declare const _: (<T>(arg: T) => T) & { [key: string]: () => any }
const test = [{name: "Shanon", age: 24}].filter(_.age);
какая машинопись сейчас устраивает, но она небезопасна, поэтому любая помощь будет признательна.
РЕДАКТИРОВАТЬ: С моими минимальными навыками компиляции, я думаю, что мне нужно набирать текст, чтобы понять, что когда я нахожусь в контексте подчеркивания "CallExpression", имеет очень уникальное значение (CallExpression в AST).
РЕДАКТИРОВАТЬ2:
это определение AST, которое мне нужно вывести (что-то вроде этого), важно отметить, я не хочу, чтобы подчеркивание преобразовывалось до того, как оно будет проверено на наличие типов, но я хочу проконтролировать, как подчеркивание проверяется на тип. Он должен обрабатывать только подчеркивание как этот тип внутри типа AST CallExpression