簡體   English   中英

我如何使這個 typescript function 返回強類型數組而不是 string[]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM