Typescript 使用解构+rest 在 Fans 参数上添加类型
Typescript add typing on Fn's parametrs with destructuring+rest
问题
你好尝试学习打字稿中的一些打字,但在尝试添加打字稿中的打字时遇到了一些问题:
我不确定如何在 Typescript 中将其转换为强类型。
const omit = (prop: P, { [prop]: _, ...rest}) => rest;
- 所以问题是如何为第二个参数中的解构对象添加类型
我试过的
这是我认为它应该看起来像但不起作用的样子:
const omit = <P = string, R>(prop: P, { [prop]: _, ...rest } : {[prop: string], rest: R }): R => rest;
const omit = <P = string, O, R = Omit<O,P>>(prop: P, { [prop]: _, ...rest } : {[prop: string]: O[P], rest: R }): R => rest;
const omit = <P = string, R>(prop: P, { [prop]: _, ...rest } : {[prop]: P, rest: R }): R => rest;
这实际上写起来相当简单。就使用泛型而言,您走在正确的轨道上,但是您试图根据如何分解第二个参数来计算函数的结果来表达第二个参数的类型,这不是这里的方法。
相反,允许第二个参数采用任何类型,方法是声明一个不受约束的泛型,并将第一个参数的类型指定为被约束为 属性 泛型任何类型的键中的任何一个被实例化,即第二个参数的类型是什么。
const omit = <O, P extends keyof O>(prop: P, { [prop]: _, ...rest }: O): Omit<O, P> => rest;
const o = { a : 1, b: 2 };
const r = omit('a', o);
请注意,函数的 return 类型将被正确推断为 Omit<O, P>
,无需指定。
const omit = <O, P extends keyof O>(prop: P, { [prop]: _, ...rest }: O) => rest;
问题
你好尝试学习打字稿中的一些打字,但在尝试添加打字稿中的打字时遇到了一些问题:
我不确定如何在 Typescript 中将其转换为强类型。
const omit = (prop: P, { [prop]: _, ...rest}) => rest;
- 所以问题是如何为第二个参数中的解构对象添加类型
我试过的
这是我认为它应该看起来像但不起作用的样子:
const omit = <P = string, R>(prop: P, { [prop]: _, ...rest } : {[prop: string], rest: R }): R => rest;
const omit = <P = string, O, R = Omit<O,P>>(prop: P, { [prop]: _, ...rest } : {[prop: string]: O[P], rest: R }): R => rest;
const omit = <P = string, R>(prop: P, { [prop]: _, ...rest } : {[prop]: P, rest: R }): R => rest;
这实际上写起来相当简单。就使用泛型而言,您走在正确的轨道上,但是您试图根据如何分解第二个参数来计算函数的结果来表达第二个参数的类型,这不是这里的方法。
相反,允许第二个参数采用任何类型,方法是声明一个不受约束的泛型,并将第一个参数的类型指定为被约束为 属性 泛型任何类型的键中的任何一个被实例化,即第二个参数的类型是什么。
const omit = <O, P extends keyof O>(prop: P, { [prop]: _, ...rest }: O): Omit<O, P> => rest;
const o = { a : 1, b: 2 };
const r = omit('a', o);
请注意,函数的 return 类型将被正确推断为 Omit<O, P>
,无需指定。
const omit = <O, P extends keyof O>(prop: P, { [prop]: _, ...rest }: O) => rest;