TypeScript: как расширить определения типов модуля npm?
В справочнике по TypeScript приведен пример объединения объявлений:
// observable.js
export class Observable<T> {
// ... implementation left as an exercise for the reader ...
}
// map.ts
import { Observable } from "./observable";
declare module "./observable" {
interface Observable<T> {
map<U>(f: (x: T) => U): Observable<U>;
}
}
Observable.prototype.map = function (f) {
// ... another exercise for the reader
}
// consumer.ts
import { Observable } from "./observable";
import "./map";
let o: Observable<number>;
o.map(x => x.toFixed());
Поскольку Webpack компилирует мой код TypeScript, я могу использовать модуль npm xstream, который поставляется с определениями этого типа:
import {Stream, MemoryStream, Listener, Producer, Operator} from './core';
export {Stream, MemoryStream, Listener, Producer, Operator};
export default Stream;
Я могу использовать это так (map
является допустимым методом):
// consumer.ts
import { Stream } from "xstream";
let s: Stream<number>;
s.map(x => x);
Я хотел бы продлить Stream
интерфейс и попробовал что-то похожее на официальный пример. Так что в моем случае это "xstream"
вместо "./observable"
и мои расширения находятся в файле extensions.ts вместо map.ts:
// extensions.ts
import { Stream } from "xstream";
declare module "xstream" {
interface Stream<T> {
foo(): Stream<T>;
}
}
Stream.prototype.foo = function foo() {
console.log('foo');
return this;
};
// consumer.ts
import { Stream } from "xstream";
import "./extensions";
let s: Stream<number>;
s.foo().map(x => x);
К сожалению, я получаю несколько ошибок:
ERROR in [default] <path to my project>/node_modules/xstream/index.d.ts:2:9
Export declaration conflicts with exported declaration of 'Stream'
ERROR in [default] <path to my project>/src/extendingExistingModule/extensions.ts:8:0
Cannot find name 'Stream'.
ERROR in [default] <path to my project>/src/extendingExistingModule/index.ts:5:8
Property 'map' does not exist on type 'Stream<number>'.
Как я могу их исправить?
используемые версии
typescript@2.0.0
xstream@5.3.2