2017-02-02 8 views
1

StringMap<string, boolean>の型を返す必要がある関数があるとします。有効な戻り値の例は、{"required": true}です。TypeScriptの関数からオブジェクト(特定のキー、値型)を返す

戻り値の型が{ [s: string]: boolean }の関数を作成できるチュートリアル(チュートリアルは重要ではありません)を読みましたが、これは上記のStringMapと同じ戻り型です。

これらの2つの戻り値の型は同じですか?そして2番目のバージョンはどのように有効ですか?

  1. 私がTypeScriptで見たすべての戻り値型は、過去の型、つまりブール値、数値、任意のもののみを含みました。例えば、function(): number {}。 2番目のバージョンではs: stringを使用します。これは変数に名前を付け、その型を指定することを意味します。どのようにして変数に名前を与えることができますかs
  2. さらに、この文字列を配列[s: string]の中に2番目のバージョンのキーとして入れます(したがって、キーは配列になりました)。 StringMapにはキーとしての文字列があります。

答えて

4

シンタックスは考えているものとは少し異なります。これは、辞書\マップを定義するためのユニークな構文です。

{ [s: string]: boolean }は、文字列型のキーを持つマップを意味し、値はブール値です。 sは何も意味しません、あなたが望むものであった可能性があります。

(より複雑な型をマッピングするときに、なぜ私の推測では、コードをより明確にすることです?最初の場所でそれに名前を付け、。時には、などの指標id、時にはaddressを、呼び出したいですよ...)

さらに詳しい情報here、インデックスタイプはあなたが望むものです。

オンラインでTypescriptハンドブックを読むのは、これまでで最もフレンドリーな文書ではありませんが、十分に良いと思っています。特に2.0以降では、マップされたタイプのようなクレイジーな\ awesomeタイプの機能が追加されています。

0

タイプ{ [s: string]: boolean }は、indexable typeインターフェイスを定義します。

配列として表示されるのは、インターフェイスのインデックスを定義するための構文だけです。

私が知る限り、キーの名前は無視され、重要なのはそのタイプだけです。

このコード{ [s: string]: boolean }はインデックスが文字列であり、値がブール値であるインデックス可能なインターフェイスを定義しています。

は、私は次のようにStringMapの定義があると仮定します。名前は、それが文字列のマップであることを言うように、あなたが(私に尋ねるので、キーは文字列である必要がある場合は一種の冗長である

export interface StringMap<T, U> = { [s: T]: U }; 

)。私は宣言していたとしてIStringMapインタフェース:活字体で

export interface IStringMap<T> = { [key: string]: T }; 

インターフェースがちょうどオブジェクトの「形状」を定義します。前の3つの定義は同等の形をしていますので、これは完全に有効です:

function fn() : IStringMap<boolean> { 
    let myMap : StringMap<string, bool> = { }; 

    myMap["foo"] = true; 
    myMap["bar"] = false; 
    myMap["baz"] = true; 

    return myMap; 
} 

let foo: { [bazzinga: string]: boolean } = fn(); 
関連する問題