2016-10-11 12 views
0

es6の私の好きな機能の1つは、構造化パラメータを使用することです。たとえば は:明示的な型は、引数の1つに割り当てする必要があるとき構造化パラメータの型付きのデフォルト引数

function example1({ 
    bar = -1, 
    transform = Math.abs 
} = {}) { 
    transform(bar); 
} 

しかし、typescriptですコンパイラは、(例えば、それをデフォルトで推論されるより大きな柔軟性を提供するために)エラーを生成します。

:残りのパラメータの型を推論することができたときに過度に複雑なようだ -

type Formatter = { (n: number): (number | string) }; 

function example2({ 
    bar = -1, 
    transform: Formatter = Math.abs 
} = {}) { 
    // ERROR: cannot find name 'transform' 
    return transform(bar) + ' is the value'; 
} 

私が見つけたこれを回避する唯一の方法は、明示的にパラメータのセット全体を入力することです

思考? #2のシンプルさで#3を達成する構文がありますか?

答えて

0
type Formatter = { (n: number): (number | string) }; 

function example2({ 
    bar = -1, 
    transform = Math.abs as Formatter 
} = {}) { 
    // ERROR: cannot find name 'transform' 
    return transform(bar) + ' is the value'; 
} 

デフォルトのパラメータを使用するときは、型推論を目指しています。型定義がない場合や、独自の型定義を提供したい場合は、単に型としての変数としてキャストしてください! :)

+0

興味深い。私は、タイプを拡張するタイプ強制の能力については考えていませんでした。通常、タイプを狭めるのに使用されていました。また、非構造化パラメータには、デフォルト値(必須またはオプション)を持たない型付きパラメータを含めることはできません。少なくとも、 "example3"のような明示的な型付けは必要ありません。 – bjnsn

関連する問題