我们希望分发组件,意图是任何兼容的运行时都可以使用它们。这些组件只是用JSX编写的函数,并转换为通用工厂函数h
。因此,输出应该(在大多数情况下)与React,Preact,Inferno,Hyperapp,vhtml等兼容。例如,这是一个简单的<Title />
组件:
import { h } from 'runtime';
const Title = ({ title, url }) => (
<div className="component-heading">
<a href={url} className="component-heading-link">
{title}
</a>
</div>
);
export default Title;
我们希望使用类型来装饰我们的组件,主要是为了让消费者在将属性传递给他们时获得帮助。如果我们借用React类型,它可能看起来像这样:
import { SFC } from 'react';
import { h } from 'runtime';
export interface Props { … }
const Title: SFC<Props> = ({ title, url, premium }) => (
<div className="component-heading">
<a href={url} className="component-heading-link">
{title}
</a>
</div>
);
export default Title;
如果消费者使用TypeScript和React,这是非常好的,但如果他们使用Preact或任何其他兼容的运行时,类型将发生冲突。
因此,是否可以编写通用性足以供非React运行时使用的功能组件?