Javascript 如何在typescript文件中导入没有定义文件的js库

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

随着我们的项目越来越大,我想从JavaScript切换到TypeScript来帮助进行代码管理。然而,我们将大量库用作amd模块,我们不想将其转换为TypeScript

我们仍然希望将它们导入到TypeScript文件中,但我们也不希望生成定义文件。我们如何才能做到这一点

e、 g.新的Typescript文件:

/// <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年遇到了这个问题,并找到了一个简单的解决方案:

  • 在ts项目的根目录中创建一个decs.d.ts文件

  • 在此声明中:

    declare module 'lib/errorInfoHandler';
    

  • 这消除了我案例中的错误。我正在使用TypeScript 3.9.7

    谢谢您提供的信息。但是它仍然抛出错误“无法解析外部模块”`我需要在import require语句中添加什么扩展名为js文件的路径?在第一行的
    var
    之前需要一个
    declare
    ,您可以跳过
    declare module
    部分,您只需在
    var
    根据
    声明模块“*”
    就足够了。是的-只需按照@gronostaj使用此最小声明即可。注意“声明模块”模块名称“;”将只允许此模块没有类型,而“*”将声明所有模块具有更多类型。我们更喜欢前者,因为我们可以根据具体情况确定哪些模块没有类型。
    declare module 'lib/errorInfoHandler';