我正在尝试将TypeScript集成到一个相当新的项目中,其中有几个库。为了支持旧浏览器,我决定以ES5为目标。我选择了模块系统AMD,因为它要到前端。
我的test.ts文件使用了3个库,我导入了这些库,这样TypeScript就可以使用这些库并进行良好的编译:
import * as $ from "jquery";
import * as ko from "knockout";
import * as pdfjsLib from "pdfjs-dist";
export var MyViewModel = function (this: any, initUrl: string) {
var self = this;
self.UrlValue= ko.observable(initUrl);
self.UrlValue.subscribe(function (newValue: string) {
self.showPdfPreview(newValue);
});
self.showPdfPreview = function (url: string) {
var loadingTask = pdfjsLib.getDocument(url);
...
}
}TypeScript使用以下导入将其编译为test.js:
define(["require", "exports", "jquery", "knockout", "pdfjs-dist"], function (require, exports, $, ko, pdfjsLib) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });如果我尝试使用它,就会得到以下错误:TypeError: pdfjsLib is undefined 如何修复?
RequireJs基本上配置如下:
<script src="~/lib/requirejs/dist/require.js"></script>
<script>
require.config({
baseUrl: "/",
paths: {
"jquery": "lib/jquery/dist/jquery-3.4.1",
"knockout": "lib/knockout/dist/knockout-3.5.0",
"pdfjs-dist": "lib/pdfjs/dist/build/pdf",
"mytest": "js/test"
},
waitSeconds: 15
});
require(
["jquery", "knockout", "pdfjs-dist", "mytest"],
function ($, ko, pdfjsLib, mytest) {
var viewModel = new mytest.MyViewModel("@Model.Value");
ko.applyBindings(viewModel);
}
);
</script>我假设我必须要求pdfjsLib in test.ts。不过,我不能在那里使用require,因为TypeScript不知道这个定义。在那里导入库也不起作用,TS说它不是一个模块。我觉得我错过了什么。
发布于 2019-07-10 11:45:53
为了使TypeScript以ES5为目标,必须更改进口。另外,由于某种原因,pdfjs别名需要与pdfjs模块的路径相同。在我的例子中,这是pdfjs-dist/build/pdf。所以进口现在看起来是这样的:
/// <reference path="../TypeScript/@types/knockout/index.d.ts" />
import $ = require("jquery");
import pdfjsLib = require("pdfjs-dist/build/pdf");不推荐使用引用,但我还没有找到一个可行的替代方案。
必须将RequireJs配置更改为:
<script src="~/lib/requirejs/dist/require.js"></script>
<script>
require.config({
baseUrl: "/",
paths: {
"jquery": "lib/jquery/dist/jquery-3.4.1",
"knockout": "lib/knockout/dist/knockout-3.5.0",
"pdfjs-dist/build/pdf": "lib/pdfjs/dist/build/pdf",
'pdfjs-dist/build/pdf.worker': "lib/pdfjs/dist/build/pdf.worker",
"mytest": "js/test"
},
waitSeconds: 15
});
require(
["knockout", "mytest"],
function (ko, mytest) {
var viewModel = new mytest.MyViewModel("@Model.Value");
ko.applyBindings(viewModel);
}
);
</script>https://stackoverflow.com/questions/56938470
复制相似问题