2016-05-01 4 views
0

React DOM要素のいくつかの機能を改善する必要があります。 d.tsTypescript:オブジェクトメンバーのタイプを変更する

interface ReactDOM { 
    // HTML 
    a: HTMLFactory; 
    abbr: HTMLFactory; 
    address: HTMLFactory; 
    area: HTMLFactory; 
    article: HTMLFactory; 
    aside: HTMLFactory; 
    ... 

のようなDOM要素のリストがありますが、私のJSにすべての要素がのリアクト1の関数のラッパーです。 私のようなものが必要です。あなたはジェネリック型(Tとのインタフェースを宣言することができMyHTMLFactory

+0

をあなたが明確であることしていません –

答えて

0

質問は、私は同じキーを持つオブジェクトを持っていることをTypeSript伝える方法です

type MyHTMLFactory = DOMFactory<HTMLProps<HTMLElement> & SMTH>; 

が、切り抜いた型を持つの)

interface IReactDom<T> { 
    a: T; 
    abbr: T; 
    address: T; 
    area: T; 
    article: T; 
    aside: T; 
} 

let myObj: IReactDom<HTMLFactory> = ... 
myObj.a // HTMLFactory 

注:Doc - generics

* EDITの*

私は拡張し、新しい要素を追加しますが、どのように私は基本要素の種類を変更することができますすることができますか?これを行うにはクリーン方法...しかし、あなたはこれを解決するために少しハックを作成することができます - 私はtypscriptについて知っているように

は、何公式はありません。
私たちの目標でもIBaseTypeを拡張するだけでなく、カスタムタイプ、IGoalTypeを定義することであるのは、

interface IBaseType { 
    a: string 
    b: string 
    c: string 
    n: number 
    m: number 
} 

例えばIBaseTypeそれを呼びましょう、あなたが変更することはできませんのはinterfaceは、(この例で反応するから)があるとしましょうab & cObjectなどのタイプを変更します。これを行うには、私たちは今、「ブリッジ」

interace IBridge extends IBaseType { 
    a: any 
    b: any 
    c: any 
} 

interface IGoalType extends IBridge { 
    a: Object 
    b: Object 
    c: Object 
} 

として機能するインターフェイス(はい、これはクリーンなソリューションではありません)第三が必要になります、それをテスト:

let o: IGoalType 
o.a // Object 
o.a // Object 
o.a // Object 
o.n // number 
o.m // number 
+0

はい、私は知っていますが、この場合、私は鍵のリストを複写する必要があります。もし新しい要素があれば、私はそれらにコピーしなければならないでしょう。 Reactの 'dts 'を最新のものにすることができればいいと思う。何らかの理由で型を推論することは可能かもしれません。つまり、配列をマップする場合、型が変更されたことをTypeScriptが認識します。 – aspirisen

+0

そのreact.d.tsタイプを拡張するとどうなりますか?インタフェースAはReact.Typeを継承します – Manu

+0

はい私は新しい要素を拡張して追加できますが、基本要素の扱い方、型の変更方法は? Reactの要素は 'style、id、className'などの属性を受け入れます。 ReactのDOM要素をすべて自分の属性を受け入れるようにする必要があります。これは、私がすべての 'React.DOM'要素をいくつかのstufを実行し、元のReactの関数を呼び出すよりも、JSで動作しますが、TypeScriptではどのように型を割り当てるのかわかりません。今は「d.ts」のコピーです。 – aspirisen

関連する問題