Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript未执行类型检查_Typescript_Typechecking - Fatal编程技术网

Typescript未执行类型检查

Typescript未执行类型检查,typescript,typechecking,Typescript,Typechecking,我试图利用TypeScript类型检查,但我被以下代码卡住了: 抽象类哺乳动物{ 抽象品种(其他:哺乳动物); } 犬类哺乳动物{ 品种(其他:狗){} } 猫科哺乳动物{ 品种(其他:猫){} } 康斯特·托比=新狗(); const lucy=新狗(); const luna=新的Cat(); 托比·布莱德(露西);//好啊 托比·布莱德(露娜);//工作,但它不应该,因为露娜是一只猫! TypeScript似乎在这里执行某种duck类型的键入,并且正在考虑Dog==Cat。如何让type

我试图利用TypeScript类型检查,但我被以下代码卡住了:

抽象类哺乳动物{
抽象品种(其他:哺乳动物);
}
犬类哺乳动物{
品种(其他:狗){}
}
猫科哺乳动物{
品种(其他:猫){}
}
康斯特·托比=新狗();
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;