Typescript未执行类型检查
我试图利用TypeScript类型检查,但我被以下代码卡住了:Typescript未执行类型检查,typescript,typechecking,Typescript,Typechecking,我试图利用TypeScript类型检查,但我被以下代码卡住了: 抽象类哺乳动物{ 抽象品种(其他:哺乳动物); } 犬类哺乳动物{ 品种(其他:狗){} } 猫科哺乳动物{ 品种(其他:猫){} } 康斯特·托比=新狗(); const lucy=新狗(); const luna=新的Cat(); 托比·布莱德(露西);//好啊 托比·布莱德(露娜);//工作,但它不应该,因为露娜是一只猫! TypeScript似乎在这里执行某种duck类型的键入,并且正在考虑Dog==Cat。如何让type
抽象类哺乳动物{
抽象品种(其他:哺乳动物);
}
犬类哺乳动物{
品种(其他:狗){}
}
猫科哺乳动物{
品种(其他:猫){}
}
康斯特·托比=新狗();
const lucy=新狗();
const luna=新的Cat();
托比·布莱德(露西);//好啊
托比·布莱德(露娜);//工作,但它不应该,因为露娜是一只猫!
TypeScript似乎在这里执行某种duck类型的键入,并且正在考虑Dog==Cat
。如何让typechecker拒绝此代码
旁注:这是我在Rust中的做法:
哺乳动物的特征{
fn品种(&self,其他:&self);
}
结构Cat{}
猫科哺乳动物{
fn品种(&self,_其他:&self){}
}
结构狗{}
狗用哺乳动物{
fn品种(&self,_其他:&self){}
}
fn main(){
让托比=狗{};
让露西=狗{};
设luna=Cat{};
托比·布莱德和露西;
toby.breed(&luna);//预期结构为'Dog',发现结构为'Cat'`
}
TypeScript是(感谢@jcalz)
结构类型背后的思想是,如果两种类型的成员是兼容的,那么它们是兼容的
不是很优雅,但是很有效:您可以添加一个虚拟属性来在类()之间进行一些区别:
奖励:您可以在基类中使用(感谢@jcalz)
abstract breed(other: this): void;
这是正确的答案;TypeScript是,提问的人可能不习惯这样。另外,
抽象品种(其他:this):void
可能是更合适的签名。
abstract breed(other: this): void;