2017-10-08 4 views
0

私はいくつかの検索を行っており、私が持っているこの特定の問題を解決する答えを見つけることができません。どんな助けも素晴らしいだろう。閉鎖内の関数の型を取得する

私は現在、基本的な依存性注入のためにクロージャを使用していますが、関数が "any"になるのを避けようとしています。

には、以下の私が持っているとしましょう:

// DB-fns.ts

export const makeQuerySql = ({pool: SqlPool}) => 
    <T>(query: string, args?: any): Promise<T> => { 
     // fn code 
    } 

//ユーザーfns.ts

export const makeGetUser = ({querySql}: Dependencies) => (userId: number) => { 
    // fn code 
} 
export interface Dependencies { 
    querySql: ???? 
} 

// index.ts

import {makeQuerySql} from 'db-fns.ts'; 
import {makeGetUser} from 'user-fns.ts'; 
const querySql = makeQuerySql({pool}); 
const getUser = makeGetUser({querySql}); 

私はtypeof quを得る方法がわかりません

export interface Dependencies { 
    querySql: <T>(query: string, args?: any) => Promise<T> 
} 

index.ts型チェックでは次に、あなたのコード:user-fns.ts

答えて

1

まあにおける依存関係インターフェイスでerySqlは、あなたはこのようにそれをdefinieので、もしmakeQuerySqlは、<T>(query: string, args?: any) => Promise<T>を返すことを宣言しました。

私が言うことができる限り、それはあなたの質問に対する答えです。


私は懐疑的です。 makeQuerySqlは実際に<T>(query: string, args?: any) => Promise<T>を生成しますか?ファンクションのパラメータのいずれもタイプTと何も関係していないにもかかわらず、のいずれかのタイプ値がTの場合はPromise<T>を返します。それはどうですか?

makeQuerySqlコールでSqlPool変数のタイプを指定する必要があります。暗黙的にanyになります。 TypeOfSqlPoolはあなたがSqlPool変数になりたいタイプに置き換えられ

({ pool: SqlPool }: { pool: TypeOfSqlPool }) => 
    <T>(query: string, args?: any): Promise<T> 

ような何か。

これは助けになると思っています。がんばろう!

+0

例では、プレースホルダようにプールの種類は、ちょうどそこにその部分には何の心配はなかった。それは単にSQLのDBへの一般的なクエリだと) は、引数には無関係なので、呼び出し側は期待を指定します戻り値の型。 私は実際にそのようなタイプを宣言する際に少し異なるルートをとってしまいましたが、エクスポートタイプQuerySql = (query:string、args ?: any)=>約束; それは本質的に同じことです。 私はfnのタイプを再宣言する必要はないと思っていただけです。 :( – Jed

関連する問題