我有一個帶有泛型引數的函式T。我希望這個通用引數是不同常量字串的總和型別,例如"alpha"|"beta",或者是具有字串值的列舉,例如enum ExampleEnum { Alpha = "ALPHA", Beta = "BETA" }. 無論哪種方式,在運行時所有值都將是字串,我應該能夠在使用字串的任何地方使用它們。
這是示例函式:
function chooseRandom<T>(inputs: T[], callback: (chosen: T) => void) {
const t = inputs[4]; // die roll, guaranteed to be random
acceptsOnlyString(t);
callback(t);
}
function acceptsOnlyString(input: string) {
console.log(input);
}
當然,有了這個,我打電話時會出錯acceptsOnlyString:
型別“T”不可分配給型別“字串”
我在這個例子中包含了回呼函式來解釋為什么我不能只使用string——chooseRandom函式的用戶會想要指定一個只接受T而不是任何可能的字串的回呼。
我如何向打字稿解釋T應該限制??為可分配給字串的型別?
uj5u.com熱心網友回復:
extends您可以使用關鍵字限制泛型允許的型別:
function chooseRandom<T extends string>(inputs: T[], callback: (chosen: T) => void) {
const t = inputs[4]; // die roll, guaranteed to be random
acceptsOnlyString(t);
callback(t);
}
有了這個限制,typescript 就知道傳入是安全t的acceptsOnlyString
游樂場鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/416606.html
標籤:
