Типизированный набор текста в Cyclejs для функциональной совместимости потока Mostjs?

У меня есть небольшой компонент, я хотел бы предоставить типизацию свойств для аналогичных этому примеру

Я использую цикл js с потоковой библиотекой mostjs.

Это работает:

import { Sources } from '@cycle/run';
import { setup } from '@cycle/most-run';
import { div, input, span, makeDOMDriver, MainDOMSource } from '@cycle/dom';
import { of, Stream, startWith } from 'most'; 

function Checkbox(sources: Sources) {
  const click$ = sources.DOM.select('.checkbox').events('click');
  const toggleCheck$ = click$
    .filter(ev => ev.target instanceof HTMLInputElement)
    .map(ev => ev.target.checked)

  const toggled$ = startWith(false, toggleCheck$)

  const vdom$ = toggled$.map(toggled => 
    div('.checkbox', [
        input('.checkbox', {attrs: {type: 'checkbox', checked: toggled}}), 
        'Label Here'
      ])
    );

  return {
    DOM: vdom$
  }
}

const {sources, sinks, run} = setup(Checkbox, { DOM: makeDOMDriver('#mount')});
const dispose = run();

тип Sources просто:

export declare type Sources = {
    [name: string]: any;
}

и я хотел бы создать явные наборы для CheckboxSources:

import { DOMSource } from '@cycle/dom';

export type CheckboxSources = {
  DOM: DOMSource,
  props$: Stream<CheckboxProps>  
}

Но DOMSource использования Stream от xstream --- мне нужно конвертировать между двумя потоковыми библиотеками? я думал most-run будет абстрагироваться от этого обращения?

Я могу обойти, используя тип any для DOM, но предпочел бы явные наборы.

1 ответ

Решение

Для большинства.js с Cycle DOM вам нужно отдельно набирать текст:

import {DOMSource} from '@cycle/dom/most-typings.d.ts'

Мы пытались поддерживать типизацию для всех потоковых библиотек с нулевой конфигурацией, но пока TypeScript не может поддерживать generic-of-generics (например, S<T> где S будет тип потока либо из xstream или большинства, и T может быть, например, строка), эта функция, к сожалению, не представляется возможным.

Другие вопросы по тегам