#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, получить предполагаемый тип переменной, которая была объявлена без типа и без инициализатора.