みましょう、我々はこのコードを持っていると言う:互換性のあるタイプ
class MyEvent {
timestamp:number;
}
class AEvent extends MyEvent{
x:number;
y:number;
}
class BEvent extends MyEvent{
key:string;
}
var fn:(event:MyEvent)=>void;
function AE(event:AEvent){
let x = event.x; //Ok, but BEvent hasn't 'x' property.
}
fn = AE;
fn(new BEvent());
活字体がエラーについて通知しません。 typescriptの場合は有効なコードです。 私はそれを試写会場で試しました。 (1.8版)
どうやって禁止するためにタイスクリプトを強制するのですか?
例えば、C++で
class Base {
public:
int timestamp;
};
class B: public Base {
public:
char key;
};
class A: public Base {
public:
int x;
int y;
};
void fA(A *ptr) {}
void (*fn)(Base *ptr);
int main()
{
A *a = new A();
B *b = new B();
fn = fA; //error: invalid conversion from 'void (*)(A*)' to 'void (*)(Base*)'
fn(b);
}
私は、私のケースは「いくつかのまれなケースで実行時エラーが発生する可能性がある」と結論付けました。 – Oleg