打字稿:未在导入的模块上引发错误

时间:2019-08-30 12:23:57

标签: typescript npm

包裹信息

我已经创建了自己的基于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/"
  ]
}

0 个答案:

没有答案