3

我正在尝试在我的打字稿模块中导入一个外部模块。在 web 应用程序的环境中,已经有一个模块加载器,并且存在模块“my-lib”,它是用 JavaScript 编写的,不附带声明文件。

所以,我想要这个库,但在本地有模块声明(因为我是目前唯一在这种情况下使用 TypeScript 的人)。

我尝试使用typeRootsin设置声明文件的搜索路径tsconfig.json。这适用于/// <reference types="my-lib" />,但不适用于import "my-lib";。只有当我将@types文件夹放在node_modules文件夹中时,模块解析才会找到并导入它。

有什么方法可以设置它,这样我就不需要放在@types文件node_modules夹中了?

tsconfig.json:

{
    "compilerOptions": {
        "esModuleInterop": true,
        "typeRoots": [
            "./@types"
        ]
    },
    "include": [
        "src/**/*"
    ]
}

@types/my-lib/index.d.ts:

interface MyLib {
    ...
}

declare const myLib: MyLib;
export = myLib;

src/entry.ts:

import myLib from "my-lib";
...

webpack.config.js:

...
externals: {
    "my-lib": "my-lib"
},
...
4

1 回答 1

3

我用以下方法做到了tsconfig.json(我刚想到):

{
    "compilerOptions": {
        "esModuleInterop": true,
        "typeRoots": [
            "./@types"
        ],
        "baseUrl": ".",
        "paths": {
            "*": [
                "*",
                "@types/*"
            ]
        }
    },
    "include": [
        "src/**/*",
        "@types/**/*"
    ]
}
于 2018-07-06T10:50:43.417 回答