2

我有一个小组件,我想提供类似于此示例的属性类型

我正在使用带有 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使用Stream来自xstream--- 我需要在两个流库之间进行转换吗?我想most-run会把这种转换抽象掉吗?

我可以使用anyDOM 的类型,但更喜欢显式类型。

4

1 回答 1

4

对于带有 Cycle DOM 的 most.js,您需要单独获取类型:

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

我们试图以零配置支持所有流库的类型化,但是虽然 TypeScript 不支持泛型泛型(例如S<T>,哪里S是来自 xstream 或大多数的流类型,并且T可能是例如字符串),这个特性似乎不幸的是不可能。

于 2017-05-01T19:39:47.663 回答