簡體   English   中英

如何鍵入沒有可選參數的函數變體 - 使用映射元組

[英]How to type a variant of a function with no optional arguments - with mapped tuple

我嘗試為具有與源函數完全相同的參數的函數打字,但沒有一個是可選的。

我嘗試使用映射元組,使用邏輯:

type IFArgs = ArgsN<typeof getFunc>
type IMappedIFArgs = {[N in keyof IFArgs]-?: IFArgs[N]} // The -? removes "optionality"
const getFuncMandatory = <(...args: IMappedIFArgs) => string>getFunc // Error: IMappedIFArgs not a tuple...

其中 ArgsN 來自tsargs庫,並巧妙地定義如下:

export type ArgsN<T extends (...args: any[]) => any> = T extends (...args: infer K) => any ? K : never;

根據 3.1 文檔,當源是元組時,映射類型也應該是元組。 在 VS Code 中進行檢查時,情況似乎幾乎如此 - 但還不夠接近編譯器將其作為參數接受。 此外,映射類型的長度返回2 | 3 2 | 3 ,而不是3 - 這是有道理的,但不是我想要的。

任何想法如何使映射的元組成為有效的參數元組? 關於如何使用其他機制存檔相同的任何想法也很好。

您定義的一些類型已經存在於 TypeScript 中。

我還沒有調查這里發生的事情和你所擁有的之間的區別,但這似乎有效:

function getFunc(n:number,s?:string):void{}
type IFArgs = Parameters<typeof getFunc>
type IMappedIFArgs = Required<IFArgs>

const getFuncMandatory = getFunc as ((...args: IMappedIFArgs) => string)

查看這些類型的定義以與您自己的實現進行比較: Parameters , Required

暫無
暫無

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

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