我刚刚开始使用 Typescript,并试图让编译器让我执行replServer.context.something = 123
以下操作:
import repl = require('repl');
let replServer = repl.start({
prompt: '>> '
});
replServer.context.something = 123;
但它抱怨:“类型'EventEmitter'上不存在属性'context'”。
我已经安装了类型定义,typings install dt~node --save --global
模块repl
定义如下typings/globals/node/index.d.ts
:
declare module "repl" {
import * as stream from "stream";
import * as events from "events";
// ...
export function start(options: ReplOptions): events.EventEmitter;
}
我想解决方案涉及定义我自己的类型扩展events.EventEmitter
,它具有context
任何类型(对象?),然后以某种方式覆盖定义typings/globals/node/index.d.ts
以使用新类型。
这是正确的吗?它是如何完成的?(我想你会typings/globals/node/index.d.ts
独自离开并在某处添加另一个文件(可能在typings
目录之外))。
Typescript 读取这些定义文件的顺序是(index.d.ts
以及覆盖这些定义的文件)的顺序是否重要?
谢谢!
编辑1:
我最终尝试了我的想法并且它正在工作(但这取决于目录命名......即黑客)。
我添加typings2/node/index.d.ts
了以下内容:
declare module "repl" {
import * as events from "events";
interface ReplEventEmitter extends events.EventEmitter {
context: any;
}
export function start(options: ReplOptions): ReplEventEmitter;
}
它工作正常(即保留以前的定义并context
添加 a),但这取决于我将其命名为之后 typings
的目录。
我正在使用 Atom,并且我正在使用的插件会自动更改“文件”字段tsconfig.json
以列出要包含以进行编译的文件。
如果我的文件出现typings/globals/node/index.d.ts
在“文件”之前(由 Atom 插件管理),这不起作用。它需要在它之后(否则,这会生效:export function start(options: ReplOptions): events.EventEmitter;
。
这样做的“正确”方式是什么?