无法编译:
type QueryParamValue = string | number | boolean | null | undefined;
function encodeParam(x: QueryParamValue) {
if (x === true) {
return '1';
}
if (x === false) {
return '0';
}
if (x === undefined || x === null) {
return '';
}
return encodeURIComponent(x);
}
interface QueryParams {
[_: string]: QueryParamValue|QueryParamValue[];
}
export function queryParams(params: QueryParams) {
return Object.keys(params)
.map(k => {
if(params[k] === undefined) {
return undefined;
}
if (Array.isArray(params[k])) {
return params[k]
.map(val => `${encodeParam(k)}[]=${encodeParam(val)}`)
.join('&')
}
return `${encodeParam(k)}=${encodeParam(params[k])}`
})
.filter(Boolean)
.join('&');
}
我想出了如果我将prop分配给一个中间值,那么它可以正常工作:
export function queryParams(params: QueryParams) {
return Object.keys(params)
.map(k => {
const value = params[k]; // <-- assign to intermediate value
if(value === undefined) {
return undefined;
}
if (Array.isArray(value)) {
return value
.map(val => `${encodeParam(k)}[]=${encodeParam(val)}`)
.join('&')
}
return `${encodeParam(k)}=${encodeParam(value)}`
})
.filter(Boolean)
.join('&');
}
但是这种行为似乎并不直观。有什么方法可以编译第一个示例?
答案 0 :(得分:1)
否,您需要变量:
TypeScript不能假设param[k]
每次都会返回相同的值,因为