簡體   English   中英

如何接受泛型參數以覆蓋 TypeScript 中的返回類型

[英]How to accept a generic argument to override the return type in TypeScript

現在我有一個名為 useUrl 的useUrl ,正如useTest中的代碼所示,它適用於obj

我想將其更改為接受通用參數以覆蓋默認返回類型,該怎么做?

(請注意這主要是改變 TS 類型定義,而不是 JS 邏輯)

const useUrl = <K extends string>(keys: K[]) => {
  const [searchParams] = useSearchParams();
  return qs.parse(searchParams.toString()) as { [key in K]: string };
};

const useTest = () => {
  const obj = useUrl(["name", "age"]); // the type of obj is: {name: string, age: string} 👍

  // how to change the type definition of above useUrl function make it can do this thing?
  const objWithNumberAge = useUrl<{ age: number }>(["name", "age"]); // the type of objWithNumberAge is expected to be: {name: string, age: number}
};

我不是 100% 確定你想要完成什么。

我想將其更改為接受通用參數以覆蓋默認返回類型,該怎么做?

只是為了確保我們在同一頁面上。 您在<>中編寫的類型不是返回類型,而是類型定義(這是您的 Generic)。 如果要定義返回類型,則必須在簽名末尾進行(請參見下面的答案)

現在,我認為您想讓方法的返回類型成為您在<>中定義的類型,並且參數的類型可以是任何類型。 如果是這種情況,您可以執行以下操作,這將使您提供的兩個示例至少可以工作。

const useUrl = <K extends string | object>(keys: string[]): K => {}

我們現在返回的類型與我們在<>中定義的類型相同,但我們總是傳遞一串鍵作為參數。

如果您可以提供更多示例,或者以不同的方式提出您的問題,那么可能會更容易提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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