hiiragi's ブログ

主にコンピュータ関係の備忘録を書いてます

より引数が少ない型へのアップキャスト

次の2つを組み合わせると0引数の型の変数に2引数の関数を代入できたりする

  1. (x:T, y?:T) => T型の変数に(x:T, y:T) => T型の関数を代入できる
  2. (x:T) => T型の変数に(x:T, y?:T) => T型の関数を代入できる

上の1のような代入が必要なケースがあるのかよく分からない

var fn2: (x:number, y:number) => number
fn2 = (x, y) => x * y;  // fn2に入っている関数は2引数

var fn1_: (x:number, y?:number) => number
fn1_ = fn2;

var fn1: (x:number) => number
fn1 = fn1_;

var fn0_: (x?:number) => number
fn0_ = fn1;

var fn0: () => number
fn0 = fn0_;  // fn0の型は0引数の関数だが中身は2引数の関数

console.log(fn0());  // NaN