mapみたいなのを定義したときに

class Foo {
    x: number = 1
}

class Bar<A> {
  constructor(public a: A) {}
  map<B>(f: (A) => B): Bar<B> {
    return new Bar(f(this.a))
  }
}

var bar = new Bar<Foo>(new Foo)

alert(bar.map(a => a.x).a) // 1

ここまではいいんですが、

alert(bar.map(a => a.fugaaaaaa).a) // undefined

本当はAってFooなので、持ってないfugaaaaの参照でコンパイルエラーになってほしいんですが...。

fで受け取ったAがanyになってしまいます...
何か対応策ありますでしょうか。