0
私はxlsx
ライブラリの型を改善するために取り組んでいます。私は、次の定義があります。しかし、IWorkSheet
の特定のキーがIWorkSheetCell
されていないメタデータのために使用されているオブジェクトの特定のキーの値のタイプをオーバーライドするにはどうすればよいですか?
export interface IWorkSheet {
[cell: string]: IWorkSheetCell;
}
を。例えば、!merges
は、代わりにIRange
の配列です。 「IWorkSheetCellを型に代入できません型 『IRange[]
』のプロパティ 『['!merges']
』。」
export interface IWorkSheet {
[cell: string]: IWorkSheetCell;
['!merges']?: IRange[];
}
残念ながら、これはエラーになり:従って私は次のように定義してみてください私はこれを代わりにIWorkSheetCell | any
と宣言することで回避できますが、これはオートコンプリートを破り、宣言の意図を反映しません。
オブジェクトのデフォルト値の型を宣言し、特定のキーに対してオーバーライドするにはどうすればよいですか?
は、[角度を参照してください。 d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/angular/index.d.ts#L349)と関連する[github issue](https://github.com/Microsoft/TypeScript/issues/272) – Paarth
インターフェイスとオブジェクトタイプの実際的な違いは何ですか@Paarthがリンクすると、Typescriptが "それを保つことはできないと約束する"ことができるということを指摘しています。それは、何を期待するかを考え出すのにはかなり良いようですが、 '!merges'と答えることができ、まったく異なる型を返すことができても、' worksheet [prompt( 'cell?')] 'IWorkSheetCellを仮定します。 – Wolfgang
正直なところ、私は 'type'ではこれを許しているが、' interface'では許可していないという理由はありません。あなたの例では、 'prompt()'はstringを返すので、 'worksheet [prompt()]'で文字列インデックスを参照します。 'prompt()' *は文字列 '"!merges "を返すことができますが、TSがコンパイル時にこれを知る方法はないので、return * type *は単に' string'です。 'prompt()'は任意の文字列(またはnull)を返すことができます。 – Aaron