Kozack
@Kozack
Thinking about a11y

Как програмно получить тип аргумента функции?

Вопрос из разряда кодогенерации:
Есть пачка файлов. В каких-то их них вызывается функция expose(key, value). Нужно проанализировать эту пачку файлов и найти все вызовы этой функции. Я так думаю тут нужно крутить AST. Но, далее нужно сгенерировать .d.ts файл с интерфейсом в который собрать все пары ключ значение.

Например:
expose('foo', 'bar')

// .d.ts
interface Window {
  foo: 'bar'
}


expose('calc', () => 1+1)

// .d.ts
interface Window {
  calc: number
}


Как анализируя ast найти все нужные вызовы по коду, я разберусь. Но я не понимаю, как программно получить тип второго аргумента. Ведь там может быть функция, может быть имя переменной или импортированное что-то...
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
Kozack
@Kozack Автор вопроса
Thinking about a11y
Пришлось запилить собственную утилиту
https://github.com/cawa-93/dts-for-context-bridge
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Нужно парсить AST и извлекать из него информацию, вот тут примеров много:
https://github.com/Microsoft/TypeScript/wiki/Using...

Ну вот еще статья неплохая в тему:
https://habr.com/ru/post/457770/

Ну и для изучения что вообще парсеры в AST выдают на разный код полезный ресурс:
https://astexplorer.net/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы