包裹信息
我已经创建了自己的基于ntype包的私有打字稿,该包在发布时会通过webpack编译为普通的javascript文件。
将此文件导入项目时,键入对于最初导出的功能有效。
import { Logger } from '@mp/logger'
Package struct:
/ -- @mp/logger
/ -- types
/ -- *.d.ts
/ -- index.js //!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r();else if("function"==typeof
/ -- index.d.ts
此index.d.ts
文件的内容
import { UniversalLog } from './types/UniversalLog';
/**
* This output is used to trigger the entry point for our compiled code
*/
export declare class Logger {
static getInstance: (options: LoggerOptions) => UniversalLog
}
实施信息
在代码中使用此程序包将导致以下用例:
import { Logger } from '@mp/logger'
const log = Logger.getInstance({
logLevel: 'trace'
})
在这种情况下,log
变量具有正确的键入。在LoggerOptions
中提供错误的类型也会触发tsc
引发错误。
问题
但是,getInstance()
返回的函数在提供错误的内容时不会触发相同的tsc
错误。
变量log
的类型为UniversalLog
。
UniversalLog
文件中导入的 index.d.ts
包含:
export declare class UniversalLog {
private readonly logger;
constructor(options: UniversalLogOptions);
addOutput(output: (arg: String) => void): void;
}
//# sourceMappingURL=UniversalLog.d.ts.map
编写以下代码log.addOutput(false)
不会触发tsc
错误。尽管确实会触发Webstorm警告:Argument of type is not assignable to (arg: String) => void
。
问题
如何确定触发了正确的tsc
错误?我将UniversalLog
文件与index.d.ts
类型一起导入的事实有什么关系吗?
TSConfig
{
"compilerOptions": {
"baseUrl": ".",
"outDir": "./dist/",
"sourceMap": true,
"strictNullChecks": true,
"jsx": "react",
"target": "es5",
"allowJs": true,
"moduleResolution": "node",
"lib": [ "es2017", "dom" ],
"downlevelIteration": true,
"skipLibCheck": true,
"noEmit": true,
"rootDirs": [
"src/",
"node_modules/"
]
},
"include": [
"./src/",
"./typings/",
"./node_modules/@types/",
"./node_modules/@mp/"
]
}