我正在尝试使用 victor.js TypeScript 项目 (3.0.1) 中的库,我在尝试导入和使用它时感到非常心痛。我已经从 npm 安装它以及它的类型 (victor @types/victor)。我尝试过多种方式导入它,但似乎无法在我的 IDE 中将其与类型解析一起导入。
我试过这些:
import { Victor} from 'victor';
import * as v from 'victor';
(此模块只能通过打开“allowSyntheticDefaultImports”标志并引用其默认导出来引用 ECMAScript 导入/导出)
import Victor = require('victor');
(在针对 ecmascript 模块时有效但不兼容)
const Victor = require("victor");
(有效导入,我可以构造对象,但没有任何类型)
我敢肯定之前有人遇到过与此类似的情况。如果它有助于胜利者的 index.js 的顶部有一行:
exports = module.exports = Victor;
最佳答案
您尝试将 victor 当作 es6 模块来使用,但事实并非如此。我看到两个选项:
让 tsc 将您的模块转换为类似 commonjs 的格式,在这种情况下 tsc 将在 之间提供必要的粘合逻辑>victor 和你的代码
或者您需要通过提供胶水的模块加载器来加载您的应用程序。
当我使用您显示的导入运行最新的 tsc 时,我得到的错误是:
This module can only be referenced with ECMAScript imports/exports by turning on the 'esModuleInterop' flag and referencing its default export.
当我打开 esModuleInterop 时,它工作正常。这是我使用的测试代码:
import Victor from "victor";
const foo = new Victor(1, 2);
console.log(foo.y);
和 tsconfig.json:
{
"compilerOptions": {
"esModuleInterop": true
}
}
问题的起因是当您import Victor from "victor" 时,您要求的是将通过export default... 导出的值> 语句,这是es6模块提供的一种语法。但是,victor 会导出任何与 export default... 相对应的内容。所以必须有一些东西来弥合差距。使用上面显示的内容,当您编译时,tsc 会发出以下内容:
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
var victor_1 = __importDefault(require("victor"));
var foo = new victor_1["default"](1, 2);
console.log(foo.y);
注意 __importDefault 辅助函数。每当 TS 代码想要访问模块导出的内容时使用它 export default... 它所做的是检查模块是否声称是 es6 模块。想要导出默认值的 es6 模块已经正确构造,因此如果模块是 es6 模块,则无需执行任何操作。如果模块不是 es6 模块,那么助手会创建一种假模块,其默认导出值是原始模块的值。
自从您提到“针对 ecmascript 模块”以来,有一个重要的警告。如果你使用,这个 tsconfig.json:
{
"compilerOptions": {
"esModuleInterop": true,
"module": "es6"
}
}
那么发出的代码是:
import Victor from "victor";
var foo = new Victor(1, 2);
console.log(foo.y);
请注意,不再有任何辅助函数。模块加载器将为您的应用程序加载模块,以提供与 __importDefault 提供的逻辑相同的逻辑。如果我将文件重命名为具有 mjs 扩展名并运行:
$ node --experimental-modules test.mjs
我得到这个输出:
(node:18394) ExperimentalWarning: The ESM module loader is experimental.
2
当使用带有实验模块支持的 Node 时,它提供与 __importDefault 相同的功能。
当你只使用 allowSyntheticDefaultImports 而没有使用 esModuleInterop 时,你是在告诉编译器假设你的工具链中会有一些东西可以做__importDefault 的工作。所以编译器不提供帮助程序。它允许编译继续进行,但您稍后负责使用将执行与 __importDefault 相同工作的模块加载器。
关于javascript - 在 TypeScript 中导入 Victor.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54701255/
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1
rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易
出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=
我需要一些指导来了解如何将Angular整合到rails中。选择Rails的原因:我喜欢他们偏执的做事方式。还有迁移,gem真的很酷。使用angular的原因:我正在研究和寻找最适合SPA的框架。Backbone似乎太抽象了。我不得不在Angular和Ember之间做出选择。我首先开始阅读Angular,它对我来说很有意义。所以我从来没有去读过关于ember的文章。使用Angular和Rails的原因:我研究并尝试使用小型框架,例如grape、slim(是的,我也使用php)。但我觉得需要坚持项目的长期范围。我个人喜欢用Rails的方式做事。这就是我需要帮助的地方,我在Rails4中有