Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript默认导出未定义_Typescript_Typescript Typings - Fatal编程技术网

Typescript默认导出未定义

Typescript默认导出未定义,typescript,typescript-typings,Typescript,Typescript Typings,我正在写一个npm模块,一个简单的记录器。我用纯JS写的: logger.js class Logger { // stuff } module.exports = Logger; const Logger = require('ep-logger'); const logger = new Logger('my-logger'); logger.info('yo'); import Logger from 'ep-logger'; const logger: Logger = n

我正在写一个npm模块,一个简单的记录器。我用纯JS写的:

logger.js

class Logger {
  // stuff
}

module.exports = Logger;
const Logger = require('ep-logger');

const logger = new Logger('my-logger');
logger.info('yo');
import Logger from 'ep-logger';

const logger: Logger = new Logger('my-logger');
logger.info('yo');
在js脚本中,这样做很好:

记录器测试.js

class Logger {
  // stuff
}

module.exports = Logger;
const Logger = require('ep-logger');

const logger = new Logger('my-logger');
logger.info('yo');
import Logger from 'ep-logger';

const logger: Logger = new Logger('my-logger');
logger.info('yo');
但我们公司使用的是打字脚本。因此,在我的
logger.js
旁边,我创建了一个文件
logger.d.ts
,其内容如下

export interface SplunkOptions {
    endpoint?: string
    loggingSource?: string
    loggingSourceType?: string
}

export interface LoggerOptions {
    stage?: string
    level?: string
    splunk?: SplunkOptions
}

export default class Logger {
    constructor(name: string);

    public static setOptions(obj: LoggerOptions): void;

    public error(message: string | Error, ...data: any[]): void;
    public warn(message: string | Error, ...data: any[]): void;
    public info(message: string | Error, ...data: any[]): void;
    public verbose(message: string | Error, ...data: any[]): void;
    public debug(message: string | Error, ...data: any[]): void;
    public silly(message: string | Error, ...data: any[]): void;
}
在我的
package.json
中,我这样做了:

{
  // more package.json stuff here
  "main": "src/logger.js",
  "types": "src/logger.d.ts"
}
现在,在我的TypeScript项目中,我尝试使用我的记录器:

index.ts

class Logger {
  // stuff
}

module.exports = Logger;
const Logger = require('ep-logger');

const logger = new Logger('my-logger');
logger.info('yo');
import Logger from 'ep-logger';

const logger: Logger = new Logger('my-logger');
logger.info('yo');
但我得到一个错误,我的记录器没有默认导出:

export interface SplunkOptions {
    //...
}

export interface LoggerOptions {
    //...
}

export class Logger {
    //...
}

export = Logger;
{错误:命令失败:ts node local-lambda.ts--colors

/Users/luke/Arbeit/WeltN24/editory Products/projects/ep logger tests/js app/yo lambda/src/index.ts:5 常量记录器:记录器=新记录器(“my-logger”); ^ TypeError:ep_logger_1.default不是构造函数

事实上,如果我

console.log(Logger);
我明白了


对于当前版本的typescript(2.6或更低版本),您需要使用以下内容编写定义文件,而不是使用默认导出:

export interface SplunkOptions {
    //...
}

export interface LoggerOptions {
    //...
}

export class Logger {
    //...
}

export = Logger;
(2.7),您最初编写它的方式将开始工作(在过程中中断
导出=
),最初在
--strictSM
标志后面,然后从2.8开始,作为默认行为,不带任何标志