Нетрадиционный TypeScript или js + d.ts как основной способ разработки
Задавал уже этот вопрос на английском - https://stackoverflow.com/questions/72579249/use-typescript-declaration-in-corresponding-javascript-file. Ответа так и не дождался.
В общем, суть в том, что я хочу использовать TypeScript, но при этом хочу писать непосредственно рабочий код на чистом JavaScript, без какой-либо компиляции. Идея в том, чтобы для каждого js файла создавать d.ts. Идея как бы не нова, но суть в том, что d.ts изначально, насколько я понял, предназначен для добавления типов в уже существующие библиотеки, чтобы те могли нормально работать с использующим их кодом на тайпскрипте. Я же хотел бы видеть полноценную проверку js с помощью d.ts.
То есть, что я имею ввиду. Файл js, к которому прикреплен d.ts, должен проверятся так, будто это ts файл, как бы сумма этих двух файлов. Если, предположим, js экспортирует функцию, а в d.ts описан тип возвращаемого ей значения, то должна быть проверка, действительно ли функция возвращает подобное значение. Ну и что входные данные, допустим, те же аргументы функции, используются правильно - тоже должно проверятся.
То есть, например:
// a.d.ts
export function a(val: string): string;
// a.js
// Правильная реализация
export function a(val) {
return `Hello ${val}`;
}
// a.js
// Здесь две ошибки:
// аргумент является строкой, а строки не имеют метода "toFixed",
// и возвращаемый тип в любом случае не является строкой
export function a(val) {
return {val: val.toFixed()};
}
Документацию тайпскрипта я прошерстил от и до, и не нашел, как сделать подобную штуку. Флаг checkJs - максимум, на что тайпскрипт способен, но это всего лишь проверка корректного использования других модулей, а не реализации самого js модуля на основе своего d.ts. И он становится достаточно бесполезным, когда имеется зависимость от принимаемых на вход, а не создаваемых прямо внутри значений, ведь банально становится неизвестным тип этих самых значений. Поля класса всегда any, методы всегда принимают any и возвращают any - толку от тайпскрипта в таком случае никакого...
Ожидаемо, тайпскрипт не предполагает подобных извращений. Но, может быть, есть какое-то решение? Какая-нибудь библиотека, плагин, что угодно, что помогло бы добиться описанного результата?