带有JSON.stringify的Typescript数组映射产生错误

时间:2018-09-09 20:20:57

标签: typescript

在Typescript中,此代码段:

[].map(JSON.stringify);

正在产生此错误:

  

类型'{(值:任何,替换项?:(((键:字符串,值:任何)=>任意)=>任何)的参数| | undefined,space ?: string | number | undefined):string; (值:任何,替换项?:(字符串|数字)[] |空|未定义,空格?:字符串| ... 1个更多| |未定义):字符串; }'不可分配给'(value:Never,index:number,array:never [])=>字符串'类型的参数。   参数“替换”和“索引”的类型不兼容。     类型'number'不能分配给类型'(((key:string,value:any)=>任何)|未定义”。

我认为不应该。

对我来说,这看起来像是Typescript错误,但是在我向GitHub提交问题之前,您可以检查我是否做错了什么?

打字稿版本:3.0.3

2 个答案:

答案 0 :(得分:3)

由于第二个参数,JSON.stringifyArray.map的签名不兼容

interface JSON {
    /**
      * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
      * @param value A JavaScript value, usually an object or array, to be converted.
      * @param replacer A function that transforms the results.
      * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
      */
     stringify(value: any, replacer?: (key: string, value: any) => any, space?: string | number): string;
}

interface Array<U> {
    /**
      * Calls a defined callback function on each element of an array, and returns an array that contains the results.
      * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
      * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
      */
    map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
}

在这里您可以看到stringifycallbackfn不匹配,因为第二个参数不匹配。

但是您绝对可以[].map(i => JSON.stringify(i))

答案 1 :(得分:0)

这不是错误,它是在告诉您JSON.stringify的第二个参数的类型(它是替代函数)与预期的number类型的第二个参数不匹配(是地图功能的索引。