2017-07-15 11 views
1

私は、コマンドラインのアプリのための私のメインのファイル内に次のコードを持っている:Typescript async awaitメソッドから型付きlet値を返すか?

const init = async(): Promise<types.IContextObject> => { 
    let context: types.IContextObject; 
    try { 
     context = await createContext(dataObj); 
    } catch (e) { 
     dataObj.errors.insert({ message: e.message }); 
     process.exit(1); 
    } 

    context.info.insert({ 
    message: `Using Rules: `.bold + `${Object.keys(context.rules).join(', ')}` 
    }); 
    return context; 

を};この中

私は、次のコンパイラエラーを取得:私は私が得るtryブロック内の最後の2行に移動した場合

Variable 'context' is used before being assigned. 
let context: types.IContextObject 

Function lacks ending return statement and return type does not include 'undefined'. 

答えて

3

をお試しの外に置く場合、ありますその価値を保証するものではありません。 tryに入れた場合は、tryが失敗したときに何かを返すように、2番目のreturnメソッドを提供する必要があります。

したがって、contextのデフォルト値を指定するか、デフォルトのreturn文を下部に指定します。どちらもうまく動作します。

1

変数contextは、tryブロック外では未定義です。あなたの挿入物を移動してtryブロックの中に戻し、あなたのキャッチでnullを返すか、宣言のときにcontextをnullに設定します。ただし、キャッチステートメントの後に適切なヌルチェックを行わずに後者を実行すると、infoにアクセスしようとするとエラーが発生する可能性があります。