函数参数解构的 TSLint 错误
TSLint error for destructuring in function parameters
我想删除我在以下(对象解构参数中)遇到的 tslint 错误:
export function renameProperty(
oldProp: string,
newProp: string,
{[oldProp]: old, ...others}
): any {
return {
[newProp]: old,
...others
};
}
我得到的错误在第 5 行:
TSLint: expected parameter: '{[oldProp]: old, ...others}' to have a typedef (typedef)
当然,我可以执行以下操作,但我宁愿简单地执行满足 Typescript 键入要求的操作。
export function renameProperty(
oldProp: string,
newProp: string,
// tslint:disable-next-line:typedef
{[oldProp]: old, ...others}
): any {
return {
[newProp]: old,
...others
};
}
关于如何在 {[oldProp]: old, ...others}
行中键入 def 的任何答案?
有趣的问题,但似乎没有明确的答案。但这是一种尝试:
export function renameProperty<
T extends {},
OP extends keyof T,
NP extends string,
R = Omit<T, OP> & Record<NP, T[OP]>
>(oldProp: OP, newProp: NP, { [oldProp]: value, ...others }: T): R {
return {
[newProp]: value,
...others
} as any; // *
}
这有好处,returns 正确的类型删除了 oldProp
并添加了 newProp
。
即
const c = renameProperty("foo", "bar", { foo: 1, baz: "spam", holy: "grenade" });
console.log(c.foo, c.bar, c.baz, c.holy);
/// complains here, that 'foo' is not available in c
/// typeof c.bar === "number"
*
不幸的是,TS 无法从 {[newProp]: value}
推断出正确的类型并且结果类型是 { [x: string]: ... }
所以不幸的是需要可怕的 as any
(至少我没有找到删除它的方法 - 不是确定这是错误还是限制)。
Omit
:
我想删除我在以下(对象解构参数中)遇到的 tslint 错误:
export function renameProperty(
oldProp: string,
newProp: string,
{[oldProp]: old, ...others}
): any {
return {
[newProp]: old,
...others
};
}
我得到的错误在第 5 行:
TSLint: expected parameter: '{[oldProp]: old, ...others}' to have a typedef (typedef)
当然,我可以执行以下操作,但我宁愿简单地执行满足 Typescript 键入要求的操作。
export function renameProperty(
oldProp: string,
newProp: string,
// tslint:disable-next-line:typedef
{[oldProp]: old, ...others}
): any {
return {
[newProp]: old,
...others
};
}
关于如何在 {[oldProp]: old, ...others}
行中键入 def 的任何答案?
有趣的问题,但似乎没有明确的答案。但这是一种尝试:
export function renameProperty<
T extends {},
OP extends keyof T,
NP extends string,
R = Omit<T, OP> & Record<NP, T[OP]>
>(oldProp: OP, newProp: NP, { [oldProp]: value, ...others }: T): R {
return {
[newProp]: value,
...others
} as any; // *
}
这有好处,returns 正确的类型删除了 oldProp
并添加了 newProp
。
即
const c = renameProperty("foo", "bar", { foo: 1, baz: "spam", holy: "grenade" });
console.log(c.foo, c.bar, c.baz, c.holy);
/// complains here, that 'foo' is not available in c
/// typeof c.bar === "number"
*
不幸的是,TS 无法从 {[newProp]: value}
推断出正确的类型并且结果类型是 { [x: string]: ... }
所以不幸的是需要可怕的 as any
(至少我没有找到删除它的方法 - 不是确定这是错误还是限制)。
Omit
: