2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
你有沒(méi)有考慮過(guò)使用多態(tài)的這個(gè)而不是泛型的?您的 和 將成為:ComparableObserver
interface Comparable {
equals: (item: this) => boolean;
}
interface Observer extends Comparable {
notify: () => void
}
這意味著擴(kuò)展類型的對(duì)象需要具有一個(gè)取類型值的方法。請(qǐng)注意,這意味著在可替代性和繼承性方面不像正常類型。一般來(lái)說(shuō),如果你有,那么你應(yīng)該能夠使用任何你需要的:XComparableequals()XComparableinterface B extends A {...}BA
interface A {
someMethod(x: A): void;
}
interface B extends A {
someOtherMethod(x: B): void;
}
declare const b: B;
const a: A = b; // okay
但這不適用于:Comparable
declare const o: Observer;
const c: Comparable = o; // error! equals is incompatible
無(wú)論如何,這個(gè)定義將允許您按原樣實(shí)現(xiàn):Comparable
class TestA implements Observer {
private name = '';
equals = (item: TestA) => {
return this.name === item.name
}
notify = () => { }
}
class TestB implements Observer {
private name = '';
equals = (item: TestB) => {
return this.name === item.name
}
notify = () => { }
}
但同樣,如果您嘗試將 或 視為 :TestATestBObserver
function takeObservers(o1: Observer, o2: Observer) {
o1.equals(o2);
}
takeObservers(new TestA()); // error
所以你可能會(huì)決定你實(shí)際上不想以這種方式約束。equals()

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
在 TestA 類和 TestB 類中更改和 to。equals(item: TestA)equals(item:TestB)equals(item : Observer)
由于可比類型被給出為可觀察。
在等體中,您可以將可觀察對(duì)象轉(zhuǎn)換為TestA,并比較其名稱屬性,如下所示。
在 TestA 類中。
class TestA implements Observer {
private name = '';
equals = (item: Observer) => {
if(item instanceof TestA){
return this.name === (item as TestA).name
}
return false
}
notify = () => {}
}
添加回答
舉報(bào)