Как получить доступ к FlowNode в typescript ast api?

Я пытаюсь разрешить foo и bar из переменной nodes.

После того, как я проверил в ts-ast-viewer, вы можете видеть на картинке, что typescript может знать о foo и bar из узла nodes в разделе FlowNode. (узел -> инициализатор -> элементы -> экранированный текст (foo, bar)).

Но как я могу получить доступ к FlowNode?

Я использую ts-morph для работы над своим машинописным кодом ast. и у меня уже есть идентификатор nodes. к сожалению, я не могу получить доступ к свойствам, которые я вижу в разделе FlowNode:

console.info({ n: nodes.node }); //<-- node not exist in nodes but I can see this in picture.

Полный код:

кодыпесочница

import { Project, SyntaxKind } from "ts-morph";

console.clear();

const project = new Project({
  skipAddingFilesFromTsConfig: true
});

const sourceFile = project.createSourceFile(
  "foo.ts",
  `
const items = [foo, bar];
const nodes = [...items];
  `
);

const nodes = sourceFile
  .getDescendantsOfKind(SyntaxKind.Identifier)
  .find((n) => n.getText() === "nodes");

console.info({ n: nodes.node.initializer }); // <-- error: node is undefined

Как получить доступ к FlowNode в typescript ast api?

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
1
0
16
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Узлы потока в настоящее время не отображаются в ts-morph и на самом деле не отображаются в объявлениях типов API компилятора, но вы все равно можете получить к ним доступ.

import { Project, ts } from "ts-morph";

console.clear();

const project = new Project({
  skipAddingFilesFromTsConfig: true
});

const sourceFile = project.createSourceFile(
  "foo.ts",
  `
const items = [foo, bar];
const nodes = [...items];
  `
);

// get the identifier
const nodesIdent = sourceFile
  .getVariableDeclarationOrThrow("nodes")
  .getNameNode();

// hack to force the type checker to create the flow node
nodesIdent.getType();

// get the flow node
const flowNode = (nodesIdent.compilerNode as any).flowNode as ts.FlowNode;

console.info({ n: flowNode });

Я открыл https://github.com/dsherret/ts-morph/issues/1276, чтобы упростить задачу в будущем.

Другие вопросы по теме