TypeScript で関数にプロパティをはやしたい(その2)

この内容は TypeScript 0.9.1.1 をもとに記述しています。

TypeScript 0.9.1.1 がでましたね。次はやっと1.0かな?

さてさて、前回 は Declaration Merging で関数にプロパティをはやしたのですが、やはりというか予想通りというか対応できないケースが出てきました。

で、頭をひねってみて Interface にキャストしてみました。

interface IGreeting {
  foo(): string;
}

function greeting(): string {
  return "hello";
}

var g:IGreeting = <IGreeting>greeting;

g.foo = function(): string {
  return "world";
}

予想通り怒られました。

error TS2012: Cannot convert '() => string' to 'IGreeting':

ってことで、無理やり Any にキャストしてからさらにインターフェイスにキャストすることに。

var g:IGreeting = <IGreeting><any>greeting;

g.foo = function(): string {
  return "world";
}

無事に?いけました。生成された JavaScript は以下。

interface IGreeting{
  foo(): string;
}

function greeting(): string{
  return "hello";
}

var g:IGreeting = <IGreeting><any>greeting;

g.foo = function(): string{
  return "world";
}

完全に TypeScript の意味なしですね。。。