TypeScriptでライブラリに型定義がない場合の逃げ道
例えばaws-amplifyのようにJavaScriptで書かれたライブラリでTypeScriptの型定義がない(2018年12月02日現在)場合。
以下のようなコードで型定義のないクラスの変数を扱おうとすると
const allTodos = await API.graphql(graphqlOperation(queries.listTodos));
console.log(allTodos.data.listTodos.items);
次のようなエラーが出てプロパティにアクセスできない。
Property 'data' does not exist on type 'GraphQLResult | Observable<object>'.
Property 'data' does not exist on type 'Observable<object>'.
ひとまず関数内に閉じ込めると回避できる。
const allTodos = await API.graphql(graphqlOperation(queries.listTodos));
((todos:any) => {
console.log(todos.data.listTodos.items);
})(allTodos);
ぱっと見こんなことしてる意味がわからないのでコメント書いておいた方がいいかも。
問題の変数がコールバックに渡っていくパターンだと違和感なく行けるのだが。