在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
答案 0 :(得分:3)
由于第二个参数,JSON.stringify
和Array.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[];
}
在这里您可以看到stringify
与callbackfn
不匹配,因为第二个参数不匹配。
但是您绝对可以[].map(i => JSON.stringify(i))
答案 1 :(得分:0)
这不是错误,它是在告诉您JSON.stringify
的第二个参数的类型(它是替代函数)与预期的number
类型的第二个参数不匹配(是地图功能的索引。