次のコードは、Java で予想される型エラーを生成しますが、TypeScript はそれをエラーとは見なしません。これは仕様によるものですか、それとも TypeScript のバグですか?
abstract class UnitType<T extends UnitType<T>> {
...
}
class Unit<T extends UnitType<T>> {
...
}
class Length extends UnitType<Length> {
static meters: Unit<Length> = new Unit<Length>()
}
class Angle extends UnitType<Angle> {
static degrees: Unit<Angle> = new Unit<Angle>()
}
class UnitizedNumber<T extends UnitType<T>> {
constructor(value: number, unit: Unit<T>) {
...
}
}
// Length and Angle are not compatible, so this should be an error.
const foo: UnitizedNumber<Length> = new UnitizedNumber<Length>(1, Angle.degrees)
実際、TypeScript はこれをエラーとは見なしません。
const meters: Length = new Angle()
TypeScript はすべてのクラスを公称型ではなく構造型として扱いますか? 私はクラスを名目上の型として扱う Java と Flow に慣れています。