2014-01-03 2 views
1

Я пытаюсь использовать определения RxJs в приложении TypeScript, которое я пишу. Я импортировал defs, и теперь я пытаюсь обновить тему.TypeScript - не может «новый» интерфейс для существующего типа

this.stream = new Rx.Subject(); 

Однако, когда я пытаюсь это сделать, я получаю следующее сообщение об ошибке.

Ошибка 6 Свойство «Тема» не существует на значение типа «{ Внутренности: {(наследует ребенок: Функция, родитель: Функция): Функция; addProperties (obj: Object, ... sourcces: Object []): void; addRef (xs: Rx.IObservable, r: {getDisposable(): Rx._IDisposable;}): Rx.IObservable; }; Наблюдатель: {create (onNext: (значение: any) => void, onError ?: (exception: any) => void, onCompleted ?:() => void): Rx.IObserver; fromNotifier (обработчик: (уведомление: Rx.INotification) => void): Rx.IObserver; }; }

Когда я смотрю на DEFS типа для этого я могу видеть, что класс Subject был определен как интерфейс

export interface Subject { 
    (): ISubject; 

    create(observer: IObserver, observable: IObservable): ISubject; 
} 

Может кто-нибудь сказать мне, как я могу создать экземпляр этого субъекта класса поскольку я не могу найти способ сделать это. В настоящее время используется TS 9.1.1. Я думал, что (): ISubject может сделать это, но, похоже, не имеет никакого влияния.

Я знаю, что некоторые предложения состоят в том, чтобы определить класс вместо этого, но тогда мне нужно будет реализовать все методы из базовых интерфейсов, чтобы это было огромно, поскольку оно наследуется от IObservable.

+0

Вы не можете создать интерфейс. Есть ли какой-то класс, который является «субъектом»? – WiredPrairie

+0

Это файл определения TS, у RxJs есть функция Subject ctor, которую вы можете обновить, но я сражаюсь с системой типов здесь. – user231300

+0

Откуда вы взяли файл def? Это не текущая версия из типично типизированных библиотек GitHub. – WiredPrairie

ответ

1

Использование последней версии rx.js typing from Definitely Typed работает. Обновление вашего определения - это путь.

Вы также можете попробовать его на игровой площадке TypeScript - вам нужно будет вставить код с определенно типизированным, чтобы проверить его (длинные ссылки на игровые площадки больше не могут быть разрешены здесь).

var x = new Rx.Subject(); 
+0

Почему 'Subject' по-прежнему определяется как интерфейс в последней версии rx.d.ts? 'export interface Subject extends ISubject ' – vegemite4me

+0

Да после обновления определений моего типа до версии, совместимой с 9.1.1. Я смог заставить это работать. – user231300

Смежные вопросы