gpt4 book ai didi

typescript - 使用typescript compiler api时如何解决uninterpreted statement的问题?

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:38 25 4
gpt4 key购买 nike

我正在尝试注入(inject)一个模块
transformer.ts 的导入语句

(* 我使用了 ttypescript 并且它有效,
但有些陈述未被解释。)

我成功地插入了导入语句
但是我注入(inject)的导入语句
没有间歇性地翻译成 es5 语法。

这是我在transfomer中使用的代码。

变压器.ts

let moduleName = 'infinite.js'
let variableName = ts.createUniqueName('infinite')
ctx.hoistVariableDeclaration('infinite')

// Here are just a few key codes summarised.
let importInject = ts.createImportDeclaration(
undefined,
undefined,
ts.createImportClause(variableName, undefined),
ts.createLiteral(moduleName))

sourceFile = ts.updateSourceFileNode(sourceFile, ts.createNodeArray([
importInject,
...sourceFile.statements
]))

源代码.js

// Nothing before it.

source.js(注入(inject)的导入语句)

import infinite_1 from"infinite.js"

代码注入(inject)正常,
虽然定义了 es5 的编译器目标选项,

但是我插入的代码有一个没有翻译的问题。

但是,如果我添加一个导入语句
与模块导入代码无关

我会在模块注入(inject)之前注入(inject)源代码,
我插入的代码翻译也成功了。

源代码.js

import module from './module'
module()

source.js(注入(inject)的导入语句)

"use strict";
exports.__esModule = true;
var infinite_js_1 = require("infinite.js");
var module_1 = require("./module");
module_1["default"]();

嗯...这个编译选项问题...?
如果是,应该修改哪些编译选项?
不知道修改哪个代码...(x_x)

有没有人遇到过这样的问题?
如果您知道解决方案,请告诉我。


此外,我目前正在使用如下临时解决方案。

let importInject = 
ts.createVariableStatement(
sourceFile.modifiers,
[ts.createVariableDeclaration(
variableName,
undefined, // Type
ts.createCall(
ts.createIdentifier('require'),
undefined,
[ts.createLiteral(moduleName)]
)
)]
)

最佳答案

以下代码被发送到 es5 的原因...

import module from './module'
module()

...但是这段代码不...

import module from './module'

...是因为在发射时,编译器将删除其标识符未在表达式中使用的所有导入声明(使用 tsc 尝试该代码,您将看到此行为)。

参见 "Why are imports being elided in my emit?"

解决方案

解决方案是在表达式中使用其中一个导入的标识符,或者注入(inject)一个只导入模块以产生副作用的导入声明:

// import "./module";
let importInject = ts.createImportDeclaration(
undefined,
undefined,
undefined,
ts.createLiteral(moduleName));

关于typescript - 使用typescript compiler api时如何解决uninterpreted statement的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53946438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com