![](/img/trans.png)
[英]TypeScript interfaces not enforcing properties when an object is assigned
[英]TypeScript not enforcing interfaces
考虑接口CommicBookCharacter
interface CommicBookCharacter {
name: string;
fight : (nemisis: CommicBookCharacter) => void;
}
英雄和平民都可以实施。 除了这些角色,还有平民
class Civilian{
constructor(public name: string) {}
}
这是英雄的实现方式
class SuperHero implements CommicBookCharacter {
fight: (villian: Civilian) => void;
constructor(public name: string) {
this.fight = (hero)=> {
alert(this.name + ' is struggling back');
};
}
}
让我们也创建一些角色
var spiderMan= new SuperHero('Spider Man');
var mj = new Civilian('Mary Jane');
这是我的问题。 平民类没有实现ComicBookCharacter接口,但是SuperHero仍然可以使用Civilian参数来实现Fight方法。
这会导致一些严重的问题:
spiderMan.fight(mj);
附带说明:如果我将SuperHeru类中villian的类型更改为字符串,则将出现编译错误。 我认为,这是一种越野车行为。 SpiderMan应该无法与Mary Jane战斗!
您明确接受“ Civilian
作为参数:
interface ComicBookCharacter {
name: string;
fight: (nemisis: ComicBookCharacter) => void;
}
class Civilian{}
class SuperHero implements ComicBookCharacter {
name:string;
// You explicitly accept Civilian
fight = (villian: Civilian) => {};
}
允许此接口实现,因为函数参数类型是双变量的(如Ryan所指出的)
PS:相关https://typescript.codeplex.com/workitem/2282特别是: https : //typescript.codeplex.com/workitem/2282#CommentContainer6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.