Типизированный набор текста в 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
может быть, например, строка), эта функция, к сожалению, не представляется возможным.