Cyclejs 中的 Typescript 打字以实现 Mostjs 流互操作性?

Typescript typings in Cyclejs for Mostjs stream interoperability?

我有一个小组件,我想提供 属性 类似于 this example

的类型

我正在使用带有 mostjs 流库的 cyclejs。

这个有效:

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 使用 xstream 中的 Stream --- 我需要在两个流库之间进行转换吗?我以为 most-run 会抽象掉那个转换?

我可以为 DOM 使用类型 any,但更喜欢显式类型。

对于 most.js with Cycle DOM,你需要单独抓取打字:

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

我们尝试支持所有具有零配置的流库的类型,但是 TypeScript 不能支持泛型中的泛型(例如 S<T>,其中 S 将是来自xstream 或大多数,并且 T 可能是一个字符串),不幸的是,这个功能似乎不可能。