[英]How do I make this typescript function return strong typed array instead of string[]
我有這個 function,我正在嘗試將其從 js 轉換為 ts,我認為變量hi
的類型將是('s'|'bb')[]
但實際上它是string[]
。 我怎樣才能得到 typescript 來推斷 K 是 NewOptions 的鍵?
export const getWithOverrides = <
K extends string,
NewOptions extends { [x in K]?: boolean },
Overrides extends { [x in K]?: boolean }
>(
newOptions: NewOptions,
overrides: Overrides
): K[] =>
(Object.keys(newOptions) as K[]).filter(key => {
if (typeof overrides[key] === 'boolean') {
return overrides[key];
}
return newOptions[key];
});
const hi = getWithOverrides({ s: true, bb: true }, { s: true });
您可以通過刪除K
類型參數來做到這一點,要求 object 類型擴展Record<string, boolean>
,並將keyof
與您的兩個 object 類型一起使用:
export const getWithOverrides = <
NewOptions extends Record<string, boolean>,
Overrides extends Record<string, boolean>
>(
newOptions: NewOptions,
overrides: Overrides
): (keyof NewOptions | keyof Overrides)[] =>
Object.keys(newOptions).filter((key) => {
if (typeof overrides[key] === "boolean") {
return overrides[key];
}
return newOptions[key];
});
const hi = getWithOverrides({ s: true, bb: true }, { s: true });
// ^? const hi: ("s" | "bb")[]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.