![](/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.