2017-05-16 8 views
0

私は自分のnodejプロジェクトにTypescriptを使い始めました。いくつかの外部APIにアクセスするために、node-fetchを使用してリクエストを行います。Node-fetchを使用している場合、リクエストボディタイプをRequestInitまたはBodyInitと互換性を持たせるにはどうすればよいですか?

エラー:

Error:(176, 28) TS2345:Argument of type '{ headers: Headers; method: string; body: MyClass; }' is not assignable to parameter of type 'RequestInit'. 
    Types of property 'body' are incompatible. 
    Type 'MyClass' is not assignable to type 'BodyInit'. 
     Type 'MyClass' is not assignable to type 'ReadableStream'. 
     Property 'readable' is missing in type 'MyClass'. 

のMyClass:

class MyClass { 
    configId: string; 
    adapterType: string; 
    address: string; 

    constructor(configId: string, adapterType: string, address: string) { 
    this.configId = configId; 
    this.adapterType = adapterType; 
    this.address = address; 
    } 

    // some methods 
} 

呼び出し:

PUT要求を設定している間、エラーが与えられた身体が RequestInitを型に代入ではないことを言って、ポップアップ表示します
let body = new MyClass("a", "b", "c") 
let url = config.url + "/dialog/" + dialogId 
let headers = new Headers() 
// Append several headers 

let params = { 
    headers: headers, 
    method: "PUT", 
    body: body 
} 

return new Promise((resolve, reject) => { 
    Fetch(url, params) // <-- error is shown for params variable 
    .then(res => { 
     // Do stuff 
     resolve(/*somevalue*/) 
    }) 
} 

ボディオブジェクトをどのようにして互換にする必要がありますか?

答えて

0

私は2つの考えられるアプローチが考えられます.1つは、あなたのbodyタイプを補完する特定の方法でヘッダーを設定すると解決されるということです。

もう1つの考えは、クラスのインスタンスが適切なボディタイプではない可能性があるということです。あなたはそれを文字列化できますか?

アップデート:私はあまりにもRequestInitとの奇妙なエラーがあったが、それはオプションの種類を指定することで解決した(あなたが「paramsは」と呼ばれるものを)オブジェクト、このような:

let params: RequestInit = { 
    ... 
} 
関連する問題