如何为全局第三方库导入TypeScript模块定义
我使用的是第三方Javascript库,它必须通过index.html文件中的如何为全局第三方库导入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 ...; ...
标记直接导入。由于库位于我的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中,那么编译器将不会出现以下问题:
否则,将*.d.ts文件所在的文件夹添加到tsconfig.json中的compilerOptions/typeRoots数组中。它应该已经有“node_modules/@types”。例如:import '../myLib';
"typeRoots": [ "myLibTypesFolder", "node_modules/@types" ],
NPM找不到
。它是分开分发的。(实际的项目是Google的Blockly,这是他们的打字文件:更新了答案,添加了包不是npm@types的情况。我添加的打字文件位于@types/myLib.d.ts
,这也是我的其他*.d.ts文件所在的位置。添加src/
public/myLib.js`文件生成的内容。不要将实际的源文件和类型定义混用,这可能会混淆ts。[“src”,“node\u modules/@types”]似乎没有效果:编译器仍然忽略类型文件,而直接从