我正在构建一个简单的Typescript包/库,它使用 tsconfig 的这种变体(我尝试了各种配置,都没有成功)与Typescript v2.8一起编译:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"target": "es5",
"lib": ["es6", "dom"],
"module": "umd",
"moduleResolution": "node",
"declaration": true,
"declarationDir": "dist/types",
"outDir": "dist/lib",
"typeRoots": [
"node_modules/@types",
],
}
}
和如下所示的 package.json :
{
"name": "FooBarLib",
"version": "0.0.0",
"description": "A simple library",
"main": "dist/lib/index.js",
"typings": "dist/types/index.d.ts",
"author": "Gabriel C. Troia",
"license": "MIT",
"dependencies": {
"@types/ramda": "^0.25.35",
"@types/react": "^16.4.7",
"@types/react-dom": "^16.0.6",
"ramda": "^0.25.0",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"styled-components": "^3.3.3"
},
"devDependencies": {
"typescript": "2.8"
},
"peerDependencies": {
"ramda": "^0.25.35",
"react": "^16.4.1",
"styled-components": "^3.3.3"
},
"scripts": {
"prebuild": "rm -rf dist",
"build": "tsc"
}
}
从上面可以看到,我的FooBarLib库依赖于一系列外部库,例如react
和ramda
。一切都在本地编译,并且我能够生成js转译的文件以及类型定义文件。
但是,当我尝试将其导入一个单独的打字稿项目(使用打字稿v2.9.2)时,编译器无法找到我的FooBarLib中使用的任何第3方库类型(反应,拉姆达等),甚至尽管它们安装在项目的node_modules中,但失败并显示以下错误之一:
Cannot find module 'react'
或Cannot find module 'ramda'
等...
示例:
/// <reference types="ramda" />
import * as R from 'ramda';
export declare const myCurriedFunction: R.CurriedFunction2<string | undefined, string | string[] | undefined, string>;
此外,是否存在/// <reference types="ramda" />
似乎并不重要。发生相同的错误。
此外,导入FooBarLib的项目在本地安装了@types/ramda
。
令人沮丧的是,除了这个项目https://github.com/alexjoverm/typescript-library-starter之外,我似乎找不到更多的信息,但是仅仅使用tsconfig或package.json却没有。
更新
我发现,通过在项目的实现中手动导入第三方依赖项,可以使其成功编译。
import { foo } from 'FooBarLib';
// 3rd party dependencies
import { StyledComponentClass } from 'styled-components';
import * as React from 'react';
import * as R from 'ramda';
foo();
此解决方案的问题在于,除了无缘无故地冗长之外,如果将noUnusedLocals
设置为true,也会失败。