首页 > 解决方案 > 处理 TS 源文件动态导入 `typescript` 不会导入 ts 命名空间中的所有类型

问题描述

我的程序用于typescript处理 TS 源文件。如果我typescript使用普通import语句导入,所有类型和接口都会被导入,但是如果我typescript动态导入,则命名空间中的某些类型ts不可用。

我想动态导入的原因是因为我想保留typescript对等依赖项,如果使用我的库的应用程序不满足此依赖项,我想优雅地捕获该错误,而不是获取默认的 require 堆栈错误。

如何ts在使用动态导入时访问命名空间中的所有类型?

例子:

这有效:

import * as ts from 'typescript';

async function processSourceFile(path: string) {
  const program = ts.createProgram([path], {});
  let ic: ts.InterfaceDeclaration;
  ...
}

这不起作用:

async function processSourceFile(path: string) {
  const ts = await import('typescript');

  const program = ts.createProgram([path], {});
  let ic: ts.InterfaceDeclaration; // This line does not compile
  ...
}

我得到错误TS2503: Cannot find namespace 'ts'

我确实可以访问ts命名空间中的枚举等,但不能访问InterfaceDeclaration接口。

我认为这可能是因为默认导入或打字稿使用命名空间然后使用export = ts导出语句的事实,但我尝试const {default: ts} = await import('typescript')但得到了相同的结果。

那么,是否可以动态导入typescript并访问该ts.InterfaceDeclaration类型?

标签: typescript

解决方案


推荐阅读