typescript - 处理 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
类型?
解决方案
推荐阅读
- .net - Jenkins MSdeploy 错误代码:ERROR_USER_NOT_AUTHORIZED_FOR_IISAPP
- java - 带有openapi和openapi-generator-maven-plugin的requestbody中的多个文件
- jquery - 使用来自 Django MEDIA 文件夹的 AJAX 返回的 IMAGE URL
- node.js - npm install throws 和错误告诉 node 不是一个可识别的命令
- python - 键名无效时的 TypedDict
- angular - 使用 moment.js 在 DatePicker 角度材料上过滤周末
- phpstorm - PhpStorm 无法配置 JSHint
- service-worker - 如何使用 pwa 添加多个应用程序(添加到主屏幕)
- android - 如何从 couchbase 服务器获取每个更改通知?
- python - django import-export 不适用于 mptt