Как получить тип неинициализированной переменной в TypeScript

#typescript #typechecking #typescript-compiler-api

Вопрос:

Я пытался понять, как получить тип TypeScript переменной, которая не инициализируется при объявлении.
В основном я хочу программно, возможно, с помощью API TypeScript, получить выводимый тип переменной, которая была объявлена без типа и без инициализатора.
Я объясню лучше:
Предположим, у меня есть этот код:

 let a = 'hi';
 

Затем я получу предложение определить тип переменной, и я получу его как тип 'string' .
Я могу получить этот выводимый тип с помощью:
const type = program.getTypeChecker().typeToString(program.getTypeChecker().getTypeAtLocation(node)); . Откуда program берется TS languageServices.getProgram(); и node в данном случае будет иметь вид SyntaxKind.VariableDeclaration .
Однако этот код не будет корректно работать с чем-то вроде:

 let a;
a = 'hi';
 

В этом случае я бы получил 'any' , хотя от редактора я все еще могу получить правильное предложение 'string' . То же самое относится и к сценарию, подобному

 let a;
a = 'hi';
a = 5;
a = true;
 

Куда бы я попал 'any' , даже если бы правильный предполагаемый тип был бы 'string | number | boolean' .
Я думаю, я понял, что это нормально, что моя строка кода не должна работать в последних двух сценариях, потому что в узле объявления переменной нет типа.
Однако я не смог найти никакого другого способа получить правильный выводимый тип для объявлений переменных без инициализатора.
Здесь журналы узла ts (из последнего примера):
журнал узлов
Заранее спасибо.

Комментарии:

1. Вы можете объявить переменную с типом let a: string; . Для нескольких типов вы можете сделать let a: string | number | boolean

2. @AbhinKrishnaKA спасибо, но это не то, чего я хочу. Я хочу программно, возможно, с помощью API TypeScript, получить предполагаемый тип переменной, которая была объявлена без типа и без инициализатора.