2017-07-08 49 views
3

在打字稿,你可以結合兩種接口類型這樣如何排除從接口的關鍵在打字稿

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} 
     /> 
    ) 
    } 
} 

隨着對於其他包裹成分的屬性值I可以寫

const ValuedComponent = valueHOC(MyComponent) 

然後

<ValuedComponent /> 

但問題是,返回的組件類型也使用給定組件的props類型,因此TypeScr ipt會抱怨並要求我提供value道具。因此,我將不得不寫下類似於

<ValuedComponent value="foo" /> 

哪個值將不會被使用。我想在這裏是不特定鍵返回界面,我想有這樣的事情

React.ComponentClass<P - {value: string}> 

然後value將不再需要在返回的組件。現在可以在TypeScript中使用嗎?

+1

你可以簽出'Pick '。但是你不能動態地選擇。 – unional

回答

1

您不能從現有的接口中刪除屬性。即使試圖擴展現有的接口與value屬性設置爲可選接口將返回一個錯誤。

爲避免此問題,請修改目標組件的類型,以便value屬性爲可選。

例如

// ... 
class MyComponent extends React.Component<{value?: string}, State> { 
// ... 
} 

,然後用成分高階功能

const valuedComponent = valueHOC(MyComponent); 

時不會要求value道具製作。