0

次のコードは、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 に慣れています。

4

1 に答える 1