2017-11-21 2 views
3

Typescriptはオブジェクトのすべてのフィールドを任意にするのに役立つPartial<Object>タイプです。私は活字体のインタフェースを介して説明した同期APIを持って約束事へのインタフェースでフィールドタイプを置換

interface PromisifyPerson { 
    getName(): Promise<string>; 
    getAge(): Promise<number>; 
} 

interface Person { 
    getName(): string; 
    getAge(): number; 
} 

へ:

から Personタイプを変更しますジェネリック型 Promisify<Person>を作成するのと同じ方法で、それは可能です私の目標は、私が持っているすべてのインターフェースを書き直さずに非同期バージョンのAPIを作成することです。私はそれはいくつかの仕事を取るかもしれませんが、あなたは、それを作成することができます確信している

interface AsyncApplicationApi { 
    startApp(): Promise<void>; 
    readFile(fileName): Promise<string>; 
} 
+0

プロミスにローカル値をラップしたいのはなぜですか?それは何の理由もない余分のオーバーヘッドを追加します。 –

+0

私は、Typescriptインターフェースを介して記述されたAPIを持っています。これはデスクトップアプリケーション用のAPIであり、ほぼすべてのメソッドが同期しています。今私は、このAPIのためのリモートクライアントを作成する必要があり、私はすでに既存のインターフェイスを再利用したい。しかし、リモートクライアントは非同期的にAPIを呼び出します。ですから、私は同期APIのインターフェイスを非同期のものに変換することを考えます。タイプAsyncApplicationAPI = Async ' –

+0

私はなぜあなたが各*プロパティの代わりにAPI呼び出しのすべての値を返さないのか混乱していると思います*(私はこの人の名前をajaxで得ることができます...今度は同じ人の年齢を別のAjax呼び出しで得ることができます)。なぜ私は人が必要な場合は、 '約束 '? –

答えて

0

:私はAsyncApplicationAPIのようなものでなければならないことを期待している後

interface ApplicationApi { 
    startApp(): void; 
    readFile(fileName): string; 
} 

type AsyncApplicationAPI = Async<ApplicationApi> 

:これは別の例です。指定されたオブジェクトのすべてのプロパティを繰り返し処理する関数を作成して、Promisesでラップされているデータメンバーと、約束を返す新しい関数にラップされた関数を除いて同じオブジェクトを返すことができます。もちろん、オブジェクトのプロパティのすべてのプロパティを約束で囲むかどうかのように、具体的なことを心配する必要があります。

編集:私の答えはそれでのインスタンスを渡すことができますオブジェクトのと約束してインスタンス戻る。言語自体の中から一般的にタイプに対してはそれを行うことができないかもしれません。

+0

ええ、それはオブジェクトのすべてのフィールドをPromisesに置き換える関数を作成するのは難しいことではありません。しかし私の目標は、別のタイプに基づいて型を作成することです。 –

+0

ああ、大丈夫です。これは非常に深い疑問です。私はあなたが言語の外からコンパイラで定義する必要があると思います。おそらく、GithubのページでTypescriptの人々と直接関係するものがありますか? – setholopolus

+0

残念ながら、彼らのgithubのページによれば、これはフォーラムではありません - ご質問のために "stackoverflow"を使用してください –

関連する問題