在下面的代碼中,為什么回呼假設string | number | boolean為型別,而不是根據作為carWithListener.on函式第一個引數傳遞的屬性來檢測確切的型別?
const car = {
paint: "red",
tires: "mrf",
brakes: "disk",
bluetooth: true,
mileage: 7.45
}
type PropChangeListener<T> = {
on<Key extends string & keyof T>(
prop: `on${Capitalize<Key>}Changed`,
callback: (val: T[Key]) => T[Key]
): void
}
declare function registerForChanges<T>(obj: T): PropChangeListener<T>
const carWithListener = registerForChanges(car);
carWithListener.on("onBluetoothChanged", (val: boolean) => !val)
uj5u.com熱心網友回復:
您需要指定偵聽器所在的鍵
const car = {
paint: "red",
tires: "mrf",
brakes: "disk",
bluetooth: true,
mileage: 7.45
}
type PropChangeListener<T> = {
on<Key extends string & keyof T>(
prop: `on${Capitalize<Key>}Changed`,
callback: (val: T[Key]) => T[Key]
): void
}
declare function registerForChanges<T>(obj: T): PropChangeListener<T>
const carWithListener = registerForChanges(car);
carWithListener.on<'bluetooth'>("onBluetoothChanged", (val: boolean) => !val)
TS 游樂場:https : //tsplay.dev/mAv1vW
該宣告
callback: (val: T[Key]) => T[Key]
說,這callback是一個函式,可以采用 T 的任何型別的屬性。因此,string | number | boolean除非您指定偵聽器是關于哪個鍵,否則它可以采用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/375613.html
標籤:打字稿
上一篇:打字稿從鍵中獲取物件值
