2017-10-06 82 views
0

我试图弄清楚什么是适当的类型为Ramda食谱方法mapKeys它不会发生错误没有transpile。正确设置传递给Ramda的匿名函数的TypeScript类型

问题

错误是fn:类型的

参数 '{}' 不是分配给类型的参数 '(一个: 字符串)=>字符串'。类型“{}”不提供符合签名'(a: 字符串):string'。

我可以从R.adjust的分型看,它使用泛型,我试图(a: string) => string基于错误,这应该是正确的分型,和其他一些变化,如(a: string) => string[]

有人可以指出什么fn参数为匿名函数应该是解决typings错误?

通过将示例粘贴到使用VSCode的TypeScript项目中,并通过npm安装Ramda,这非常容易复制,并且我将R.adjust的类型作为参考。

import * as R from 'ramda'; 

export const mapKeys = R.curry(
    (fn: ???, obj: { [k: string]: any } | { [k: number]: any }) => 
    R.fromPairs(
     R.map(
     R.adjust(fn, 0), // <--- Error: tried typings for `adjust` 
     R.toPairs(obj) 
    ) 
    ) 
); 

Ramda分型为参考

adjust<T>(fn: (a: T) => T, index: number, list: T[]): T[]; 
adjust<T>(fn: (a: T) => T, index: number): (list: T[]) => T[]; 
+0

我不知道打字稿。但是该函数应该有一个接受单个字符串并返回一个字符串的类型。 –

+0

我想它理论上可以有相同的'String ||数字'类型为'toPairs',尤其是在回报中,但这可能是矫枉过正的。 (谁会用这种方式?) –

+0

@ScottSauyet啊我认为同样的,当我看到错误,但我已经尝试了错误消息中提供的'(a:string)=> string'和'string' 。我认为这可能是'调整'类型的问题,也许...因为使用'调整'的拉姆达食谱'renameBy'的另一个方法也有同样的问题 – mtpultz

回答

1

我张贴在Github问题为types/npm-ramdafix被合并到主的Ramda分型的下一版本。