【发布时间】:2017-12-12 12:09:24
【问题描述】:
在 TypeScript 中,你可以像这样组合两种接口类型
interface Foo {
var1: string
}
interface Bar {
var2: string
}
type Combined = Foo & Bar
我不想组合键,而是想将键从一个接口排除到另一个接口。无论如何你可以在 TypeScript 中做到这一点吗?
原因是,我有一个 HOC,它为像这样的其他包装组件管理属性值
export default function valueHOC<P> (
Comp: React.ComponentClass<P> | React.StatelessComponent<P>
): React.ComponentClass<P> {
return class WrappedComponent extends React.Component<P, State> {
render () {
return (
<Comp
{...this.props}
value={this.state.value}
/>
)
}
}
这样我就可以写了
const ValuedComponent = valueHOC(MyComponent)
然后
<ValuedComponent />
但问题是,返回的组件类型也使用了给定组件的 props 类型,所以 TypeScript 会抱怨并要求我提供 value prop。结果,我将不得不写类似的东西
<ValuedComponent value="foo" />
无论如何都不会使用该值。我这里想要的是返回一个没有特定键的界面,我想要这样的东西
React.ComponentClass<P - {value: string}>
那么在返回的组件中将不需要value。现在可以在 TypeScript 中使用吗?
【问题讨论】:
-
您可以查看
Pick<T, K keyof T>。但是你不能动态地挑选东西。
标签: typescript