Issue
function fun1(a:number, b:string, c:()=>void)
{
}
function fun2(...args:Parameters<typeof fun1>)
{
}
I want exclude a specific index of fun1's parameters from function fun2's parameter types.
Basically the result should be:
function fun2(b:string, c:()=>void)
{
}
I tried using Omit<Parameters<typeof this._call>, "0"> but it doesn't work.
Solution
The problem with using Omit is that it returns an object type rather than a tuple type (technically because Omit<T, U> is not a homomorphic mapping on T).
type Test = Omit<[0, 1], 0>
// type Test = {[x: number]: 0 | 1; [Symbol.iterator]: () => IterableIterator<0 | 1>; ...
To preserve the tuple type, you can declare a conditional type Tail that uses infer to obtain the the tail of T (kind of like pattern matching on the tuple structure):
type Tail<T extends readonly unknown[]> =
T extends readonly [unknown, ...infer Rest] ? Rest : never
(The readonly's are required to also allow Tail to be used on read-only tuples.) You can use Tail like this:
function fun2(...args: Tail<Parameters<typeof fun1>>) {}
// function fun2(b: string, c: () => void): void
Answered By - Oblosys
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.