Javascript 如何在typescript文件中导入没有定义文件的js库
随着我们的项目越来越大,我想从JavaScript切换到TypeScript来帮助进行代码管理。然而,我们将大量库用作amd模块,我们不想将其转换为TypeScript 我们仍然希望将它们导入到TypeScript文件中,但我们也不希望生成定义文件。我们如何才能做到这一点 e、 g.新的Typescript文件:Javascript 如何在typescript文件中导入没有定义文件的js库,javascript,requirejs,typescript,Javascript,Requirejs,Typescript,随着我们的项目越来越大,我想从JavaScript切换到TypeScript来帮助进行代码管理。然而,我们将大量库用作amd模块,我们不想将其转换为TypeScript 我们仍然希望将它们导入到TypeScript文件中,但我们也不希望生成定义文件。我们如何才能做到这一点 e、 g.新的Typescript文件: /// <reference path="../../../../definetelyTyped/jquery.d.ts" /> /// <reference pat
/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require('jquery');
import alert = require('lib/errorInfoHandler');
这实际上应该产生以下代码:
define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...
}
有没有一种方法可以将JavaScript库作为amd模块导入到TypeScript中,并在TypeScript文件中使用它,而无需创建定义文件?在
lib
中创建一个名为errorInfoHandler.d.ts
的文件。在这里,写下:
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
现在,
警报
导入将成功,类型为any
或者使用以下内容创建自己的定义文件:
declare module "lib/errorInfoHandler" {}
并在要使用导入的位置引用此文件
或在文件顶部添加以下行:
/// <amd-dependency path="lib/errorInfoHandler">
//
注意:我不知道后者是否仍然有效,这是我最初处理缺失的AMD依赖项的方式。还请注意,使用这种方法,您将无法获得该文件的IntelliSense。这里给出的两个答案的组合对我很有用
//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
}
我对TypeScript还是个新手,但这似乎只是告诉TypeScript退出的一种方式,即导出一个没有类型信息的伪变量
编辑
本答案的评论中指出,您只需声明以下内容即可获得相同的结果:
//errorInfoHandler.d.ts
declare module "*";
请参阅github注释。通常,如果您只想临时获得更快的解决方案,可以通过在项目文件夹的根目录中定义一个新的
index.d.ts
来实现,然后创建一个模块名,如package.json
文件中所述
比如说
// somefile.ts
import Foo from '@awesome/my-module'
// index.d.ts on @awesome/my-module
declare module '@awesome/my-module' {
const bind: any;
export default bind;
}
在2020年遇到了这个问题,并找到了一个简单的解决方案:
declare module 'lib/errorInfoHandler';
这消除了我案例中的错误。我正在使用TypeScript 3.9.7谢谢您提供的信息。但是它仍然抛出错误“无法解析外部模块”`我需要在import require语句中添加什么扩展名为js文件的路径?在第一行的
var
之前需要一个declare
,您可以跳过declare module
部分,您只需在var
根据声明模块“*”
就足够了。是的-只需按照@gronostaj使用此最小声明即可。注意“声明模块”模块名称“;”将只允许此模块没有类型,而“*”将声明所有模块具有更多类型。我们更喜欢前者,因为我们可以根据具体情况确定哪些模块没有类型。
declare module 'lib/errorInfoHandler';