Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为全局第三方库导入TypeScript模块定义_Typescript - Fatal编程技术网

如何为全局第三方库导入TypeScript模块定义

如何为全局第三方库导入TypeScript模块定义,typescript,Typescript,我使用的是第三方Javascript库,它必须通过index.html文件中的标记直接导入。由于库位于我的public/文件夹中,Typescript(v3.8.3)可以找到它 该库如下所示: var MyLib = {x: ..., y: ... z:...} MyLib.SomeFunc = ... MyLib.SomeOtherFunc = ... export = MyLib; declare module MyLib { function SomeFunc ...; ...

我使用的是第三方Javascript库,它必须通过index.html文件中的
标记直接导入。由于库位于我的
public/
文件夹中,Typescript(v3.8.3)可以找到它

该库如下所示:

var MyLib = {x: ..., y: ... z:...}
MyLib.SomeFunc = ...
MyLib.SomeOtherFunc = ...
export = MyLib;

declare module MyLib {
  function SomeFunc ...;
  ...
}
当我在Typescript项目中使用
MyLib
时(作为一个全局的,无
import
语句),Typescript将MyLib识别为具有
X,Y,Z
属性,但不具有
SomeFunc
SomeOtherFunc

要解决此问题,存在一个打字文件,
mylib.d.ts

看起来是这样的:

var MyLib = {x: ..., y: ... z:...}
MyLib.SomeFunc = ...
MyLib.SomeOtherFunc = ...
export = MyLib;

declare module MyLib {
  function SomeFunc ...;
  ...
}
我在src根目录中添加了
mylib.d.ts
,其他
*.d.ts
文件都在这里

但是,Typescript不会选择这个选项。它坚持通过直接读取
MyLib.js
文件得出的推论

如何让Typescript读取这些定义

我尝试过的:


  • //如果类型在npm中,则将@types/mylib.d.ts包含到package.json文件的devdependency中,那么编译器将不会出现以下问题:

    import '../myLib';
    
    否则,将*.d.ts文件所在的文件夹添加到tsconfig.json中的compilerOptions/typeRoots数组中。它应该已经有“node_modules/@types”。例如:

        "typeRoots": [
            "myLibTypesFolder",
            "node_modules/@types"
        ],
    

    NPM找不到
    @types/myLib.d.ts
    。它是分开分发的。(实际的项目是Google的Blockly,这是他们的打字文件:更新了答案,添加了包不是npm@types的情况。我添加的打字文件位于
    src/
    ,这也是我的其他*.d.ts文件所在的位置。添加
    [“src”,“node\u modules/@types”]似乎没有效果:编译器仍然忽略类型文件,而直接从
    public/myLib.js`文件生成的内容。不要将实际的源文件和类型定义混用,这可能会混淆ts。