首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决使用类型记录编译器api时未解释的语句问题?

如何解决使用类型记录编译器api时未解释的语句问题?
EN

Stack Overflow用户
提问于 2018-12-27 14:12:04
回答 1查看 211关注 0票数 2

我正在尝试注入一个模块

transformer.ts导入语句

(*我用了打字本,效果很好,

但有些陈述没有得到解释。)

我成功地插入了import语句

但是我注射的进口声明

没有间歇地转换为es5语法。

这是我在转染中使用的代码。

transformer.ts

代码语言:javascript
复制
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
]))

source.js

代码语言:javascript
复制
// Nothing before it.

source.js (注入导入语句)

代码语言:javascript
复制
import infinite_1 from"infinite.js"

代码注入正常工作,

尽管定义es5的编译器目标选项,

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

但是,如果我添加一个导入语句

与模块导入代码无关。

我会在模块注入之前注入源代码,

我插入的代码的翻译也是成功的。

source.js

代码语言:javascript
复制
import module from './module'
module()

source.js (注入导入语句)

代码语言:javascript
复制
"use strict";
exports.__esModule = true;
var infinite_js_1 = require("infinite.js");
var module_1 = require("./module");
module_1["default"]();

嗯..。这是编译选项问题.?

如果是的话,应该修改哪些编译选项?

我不知道该修改哪个代码..。(x_x)

有人遇到过这样的问题吗?

如果你知道解决办法,请告诉我。

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

代码语言:javascript
复制
let importInject = 
ts.createVariableStatement(
    sourceFile.modifiers, 
    [ts.createVariableDeclaration(
        variableName, 
        undefined, // Type
        ts.createCall(
            ts.createIdentifier('require'), 
            undefined,
            [ts.createLiteral(moduleName)]
        )
    )]
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-31 05:45:46

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

代码语言:javascript
复制
import module from './module'
module()

...but这段代码不..。

代码语言:javascript
复制
import module from './module'

...is,因为在发出时,编译器将删除在表达式中不使用标识符的任何导入声明(尝试使用tsc的代码,您就会看到这种行为)。

请参阅“为什么进口品在我的排放品中被删除?”

溶液

解决方案是在表达式中使用导入的标识符之一,或者注入只导入模块的导入声明,以避免副作用:

代码语言:javascript
复制
// import "./module";
let importInject = ts.createImportDeclaration(
    undefined,
    undefined, 
    undefined,
    ts.createLiteral(moduleName));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53946438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档