6

TypeScriptで推論された型を参照する方法はありますか?

次の例では、適切な推論された型を取得します。

function Test() {
    return {hello:"world"}
}

var test = Test()
test.hello // works
test.bob   // 'bob' doesn't exist on inferred type

Testしかし、インターフェイスを明示的に定義せずに、"Whatever returns" 型のパラメーターを受け取る関数を定義したい場合はどうすればよいでしょうか。

function Thing(test:???) {
  test.hello // works
  test.bob   // I want this to fail
}

これは回避策ですが、Test に独自のパラメーターがある場合は面倒です。

function Thing(test = Test()) {} // thanks default parameter!

Test が返すものの推論された型を参照する方法はありますか? インターフェイスを作成せずに、「テストが返すものは何でも」と入力できますか?

私が気にする理由は、通常、クラスの代わりにクロージャー/モジュール パターンを使用するためです。Typescript では、そのクラスを記述するインターフェイスを作成できますが、既に何かをクラスとして入力できます。クラスの代わりに関数が返すものとして何かを入力したい。理由の詳細については、Typescript のクロージャ (依存性注入)を参照してください。

これを解決する最善の方法は、依存関係をパラメーターとして受け取るモジュールを定義する機能、またはクロージャー内でモジュールを定義する機能を TypeScript が追加した場合です。次に、気の利いたexport構文を使用できます。これについて何か計画があるかどうか知っている人はいますか?

4

2 に答える 2

0

インターフェイスの本体を型リテラルとして使用できます。

function Thing(test: { hello: string; }) {
    test.hello // works
    test.bob   // I want this to fail
}

と同等です

interface ITest {
    hello: string;
}

function Thing(test: ITest) {
    test.hello // works
    test.bob   // I want this to fail
}

;各メンバーの最後にあることを忘れないでください。


推論された型を命名または参照するための構文はありません。最も近い方法は、使用するメンバーにインターフェイスまたは型リテラルを使用することです。インターフェイスと型リテラルは、少なくとも定義されたメンバーを持つ型に一致します。「ダックタイピング」

于 2012-12-07T19:31:21.103 に答える