TypeScript Compiler API Как установить Lib?

Я использую TypeScript Compiler API, который буквально не имеет документации так что, надеюсь, кто-то может здесь помочь.

Я пытаюсь добавить параметр ES2020 lib в параметры моего компилятора при запуске ts.createProgram.

Я обнаружил, что "lib" - это string[] , где определен интерфейс _5 здесь.

Я пробовал установить lib следующим образом:

const program = ts.createProgram(files, {
    target: ts.ScriptTarget.ES2020,
    module: ts.ModuleKind.ES2015,
    lib: ["ES2020"], // <---
    ...
}, host);

Кажется, это не работает, я получаю постоянные ошибки компиляции с указанием Cannot find name 'Array/Number/Math' и т. Д., Поэтому очевидно, что библиотека определена неправильно.

Как правильно установить либ ???


Изменить: у меня есть настраиваемый объект хоста со следующей функцией, которая может иметь отношение к вопросу:

getDefaultLibFileName(options) {
    return ts.getDefaultLibFilePath(options);
}

person David Callanan    schedule 06.08.2020    source источник
comment
Как выглядит host? Возможно, это не поиск node_modules в правильном месте.   -  person David Sherret    schedule 06.08.2020
comment
@DavidSherret В моем коде нет node_modules, который компилируется. В любом случае я пытаюсь исправить встроенные языковые модули, такие как Math, а не что-либо из модуля узла.   -  person David Callanan    schedule 06.08.2020
comment
@DavidSherret У меня есть собственный хост, я обновил вопрос, чтобы показать кое-что, что может быть актуальным.   -  person David Callanan    schedule 06.08.2020
comment
Любопытно, что тебе нужно сделать, чего нельзя сделать с tsc   -  person inorganik    schedule 06.08.2020
comment
@inorganik нестандартное разрешение модуля и переписывание импорта :)   -  person David Callanan    schedule 06.08.2020


Ответы (1)


В моем коде, который компилируется, нет node_modules. Я считаю, что это причина того, что он не работает. Хост будет искать в папке с кодом node_modules файл lib.es20202.full.d.ts.

Посмотрите результат ts.getDefaultLibFilePath(options) на хосте, и я думаю, что это будет несуществующий файл.

Чтобы исправить это, убедитесь, что настраиваемый хост предоставляет путь к файлу .d.ts, который существует, или пусть хост предоставит текст файла, который ищет компилятор (это можно сделать в памяти с помощью хоста).

person David Sherret    schedule 06.08.2020
comment
Вау, в этом есть смысл, я попробую! :) - person David Callanan; 06.08.2020
comment
Что вы имеете в виду под папкой node_modules хоста? У меня все еще есть папка node_modules вместе с моим кодом, который использует API компилятора, но код , который компилируется не имеет папки node_modules ... поэтому я думаю, что он действительно должен работать. Я попытался обновить функцию, чтобы вернуть точное местоположение в файл lib lib.es2020.full.d.ts, но это ничего не исправило. - person David Callanan; 06.08.2020
comment
@DavidCallanan Я неправильно вспомнил, откуда он берет файлы lib, но да, вы правы, он будет использовать папку node_module текущего компилятора. Проверьте вызовы, которые компилятор делает для всех readFile и fileExists на хосте, и убедитесь, что эти файлы существуют. Если это не сработает, я не уверен, что не так, не увидев больше кода. - person David Sherret; 06.08.2020
comment
Что-то подозрительно ... если я полностью удалю опцию lib, но оставлю функцию getDefaultLibFileName прежней (возвращая файл lib.es2020), ошибки исчезнут. Надеюсь, это будет работать ... в любом случае спасибо за помощь! - person David Callanan; 06.08.2020