我目前正在嘗試別名泛化類。我正在使用typescript-collections軟件包並希望進行一些重命名。類型化別名泛化類的實例
class Bar<T> {}
class Foo = Bar<X>;
我該如何去做第二行?
我目前正在嘗試別名泛化類。我正在使用typescript-collections軟件包並希望進行一些重命名。類型化別名泛化類的實例
class Bar<T> {}
class Foo = Bar<X>;
我該如何去做第二行?
如果你需要的是別名Bar<X>
式註釋/在其他地方的提示(如function blah(foo: Bar<X>)
)。你可以使用下面的語句:
type Foo = Bar<X>;
注意,你仍然不能做new Foo()
中, type
語句僅對TypeScript的「類型」部分有貢獻,而對「值」部分不起作用(就像類一樣)。
如果你想要一個實際的類,一個簡單而有效的解決辦法是延長原Bar<X>
類,像這樣:
class Foo extends Bar<X> {}
我個人特別不喜歡這種解決方案雖然,因爲它使你的代碼不太清楚。
有沒有辦法做第二部分,但不只是獲取類型信息? – iHowell
已編輯。再次,我不特別喜歡這個解決方案。 OO繼承不應該用於別名。 –
您可以從Bar<X>
繼承Foo
使一類中預定義的X
類型參數:
class Foo extends Bar<X> {}
您可以使用一個類型別名爲@toskv建議:
type Foo = Bar<X>;
然後你可以使用它作爲一種類型:
let foo: Foo = new Bar<X>();
如果你有一個接受的X
實例的構造方法,則編譯器會推斷出類型:
class Bar<T> {
constructor(x: X) { }
}
let foo: Foo = new Bar();
如果你想它綁定到特定的泛型約束一個新的類,那麼你就需要做是這樣的:
class Foo extends Bar<X> { ... }
let foo = new Foo();
如果你需要的是一個類型別名那麼你可以使用類型來創建這樣說:
type Foo = Bar<X>;
有了這個,你就可以不喜歡的事情:
let x: Foo;
但不是:
let x= new Foo();
另一種解決方案是隻延長酒吧和作出的空類。這不是真的如何使用類層次結構,但它可以滿足您的需求。
class Foos extends Bar<number> { }
你想通過第二行完成什麼?你將如何使用'Foo'? –
我打算在每個地方都用'Foo'替換'Bar'。 '酒吧'是一個很長的名字,來自typescript-collections包,'Foo'是一個更有意義的名字。 –
iHowell
你可以只鍵入Foo =欄;但我不確定這會起什麼作用。除了某些地方的類型別名外,您不能使用該類型來創建新對象,例如,只能將其用作類型別名。 –
toskv