如何使用TypeScript向泛型函数添加属性?

如何使用TypeScript向泛型函数添加属性?,typescript,Typescript,我有一个将属性添加到泛型函数参数的函数。(真正的代码稍微复杂一些,不值得深入研究。) 使用Flow,我可以使用[[call]]将泛型声明为返回类型的可调用签名,但是TypeScript没有类似API的文档。如何在TypeScript中正确键入此内容 函数addProp(func:F):{ //请注意,[[call]]不是有效的TypeScript [[呼叫]]:F; 道具:数字; } { const newFunc=函数(…参数){ 返回函数应用(此参数); } newFunc.prop=1;

我有一个将属性添加到泛型函数参数的函数。(真正的代码稍微复杂一些,不值得深入研究。)

使用Flow,我可以使用
[[call]]
将泛型声明为返回类型的可调用签名,但是TypeScript没有类似API的文档。如何在TypeScript中正确键入此内容

函数addProp(func:F):{
//请注意,[[call]]不是有效的TypeScript
[[呼叫]]:F;
道具:数字;
} {
const newFunc=函数(…参数){
返回函数应用(此参数);
}
newFunc.prop=1;
返回newFunc;
}

对于TypeScript,您可以使用将
F
与包含
prop
的类型组合在一起:

函数addProp(func:F):F&{prop:number}{
const newFunc=函数(…参数){
返回函数应用(此参数);
}
newFunc.prop=1;
返回newFunc;
}


但是,当返回
newFunc
时,由此产生的错误是:

Type '((...params: Parameters<F>) => any) & { prop: number; }' is not assignable to type 'F'.
    '((...params: Parameters<F>) => any) & { prop: number; }' is assignable to the constraint of type 'F', but 'F' could be instantiated with a different subtype of constraint '(...args: any[]) => any'.

谢谢!这修复了访问prop时出现的任何错误,但是函数的内部仍然有一个返回错误。我在这里简化了这个示例:查看更新的答案以获得解释和解决方案。您完全正确,并且在assign调用中添加func作为第二个参数似乎也解决了这个问题。
Type '((...params: Parameters<F>) => any) & { prop: number; }' is not assignable to type 'F'.
    '((...params: Parameters<F>) => any) & { prop: number; }' is assignable to the constraint of type 'F', but 'F' could be instantiated with a different subtype of constraint '(...args: any[]) => any'.