2017-07-31 5 views
0

これまでのSOの質問の中には、&&の推論型が最後の式の型であることが記載されています。以下のコードでTypeScript &&演算子は第2オペランドの型を生成しません

しかし、活字体2.4.2レポートのエラー:

function isQuerySql(sql: string): boolean { 
    return sql && _.trimStart(sql).toLowerCase().startsWith('select'); 
} 

エラーTS2322:タイプ「ブール| "" 'は' boolean '型に代入できません。 '' '' '型は' boolean '型に代入できません。

何が間違っているかわかりません。 _.trimStart(sql).toLowerCase().startsWith('select')はブール値として推論されます。 ""はどこにありますか?あなたはこれを並べ替えることができます

isQuerySql("") === "" 
isQuerySql("select") == true 
isQuerySql("foo") == false 

ので、戻り値の型が実際にboolean | ""

です:文字列sqlは、したがって、それは空の文字列を返し、機能isQuerySql&&前に式を返します空である

答えて

0

最初の比較を明示的にすることによって:

function isQuerySql(sql: string): boolean { 
    return sql !== "" && _.trimStart(sql).toLowerCase().startsWith('select'); 
} 

または強制

function isQuerySql(sql: string): boolean { 
    return !!sql && _.trimStart(sql).toLowerCase().startsWith('select'); 
} 

それとも、この:

function isQuerySql(sql: string): boolean { 
    return sql? _.trimStart(sql).toLowerCase().startsWith('select') : false; 
} 
をあなたがnullをキャッチする必要がありますし、同様に定義されていない場合ブールにそれ
関連する問題