更改从类型定义导入的类型
Change type imported from typings definition
我刚刚开始使用 Typescript,我正在尝试让编译器让我执行以下操作 replServer.context.something = 123
:
import repl = require('repl');
let replServer = repl.start({
prompt: '>> '
});
replServer.context.something = 123;
但它在抱怨:"Property 'context' does not exist on type 'EventEmitter'"。
我已经使用 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
),但这取决于我将其命名的目录 after typings
.
我正在使用 Atom,我正在使用的插件会自动更改 tsconfig.json
中的 "files" 字段以列出要包含在编译中的文件。
如果我的文件在 "files" 中出现在 typings/globals/node/index.d.ts
之前(由 Atom 插件管理),这将不起作用。它需要在它之后(否则,这将生效:export function start(options: ReplOptions): events.EventEmitter;
)。
这样做的 "proper" 方法是什么?
What's the "proper" way of doing this?
外部模块定义受到 锁定 的影响。如果支持 context
,建议您对原始定义文件进行 PR。
备选
创建typings
文件的本地副本,不再依赖于上游版本。我也这样做:https://github.com/alm-tools/alm/tree/master/src/typings
仍然比 JavaScript 好(完全没有帮助)。
我刚刚开始使用 Typescript,我正在尝试让编译器让我执行以下操作 replServer.context.something = 123
:
import repl = require('repl');
let replServer = repl.start({
prompt: '>> '
});
replServer.context.something = 123;
但它在抱怨:"Property 'context' does not exist on type 'EventEmitter'"。
我已经使用 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
),但这取决于我将其命名的目录 after typings
.
我正在使用 Atom,我正在使用的插件会自动更改 tsconfig.json
中的 "files" 字段以列出要包含在编译中的文件。
如果我的文件在 "files" 中出现在 typings/globals/node/index.d.ts
之前(由 Atom 插件管理),这将不起作用。它需要在它之后(否则,这将生效:export function start(options: ReplOptions): events.EventEmitter;
)。
这样做的 "proper" 方法是什么?
What's the "proper" way of doing this?
外部模块定义受到 锁定 的影响。如果支持 context
,建议您对原始定义文件进行 PR。
备选
创建typings
文件的本地副本,不再依赖于上游版本。我也这样做:https://github.com/alm-tools/alm/tree/master/src/typings
仍然比 JavaScript 好(完全没有帮助)。