如何在打字稿中输入 URLSearchParams 来接收对象?

Laz*_*rus 5 types typescript urlsearchparams

我有一个通过参数接收对象的函数,该对象进入 URLSearchParams 内部,在此之后,我创建一个 toString() 并得到以下答案:

const object = {
    name: 'Test',
    age: 20
};

function exampleFunction(objectExample) {

   const url = new URLSearchParams(objectExample);
   return url.toString();
};

console.log(exampleFunction(object));
// result: name=Test&age=20
Run Code Online (Sandbox Code Playgroud)

答案结果是我所期望的,问题是当我尝试输入此参数创建一个接口时,例如:

interface ObjectTest { name: string, age: number }

 function exampleFunction(objectExample: ObjectTest) {
    
       const url = new URLSearchParams(objectExample: ObjectTest) << /* error, URLSearchParams expect a type Record<string, string> */;
       return url.toString();
    };
Run Code Online (Sandbox Code Playgroud)

无需输入,代码就可以正常工作,我的问题是:如果我的 URLSearchParams 期望其他东西,我如何输入此参数来接收对象?我已经尝试传递一个对象 stringfy (如 JSON.stringfy(object) ,但结果类似于 // %7B%22ma,e%22%3A%22Test%22%2C%22age%age%22#A@) %70= 而不是 name=Test&age=20 )

Ram*_*ddy 11

URLSearchParams接受一个对象作为参数,但该对象的所有值都必须是字符串。

Record是一种实用程序类型。Record<string, string>是为其键和值都是字符串的对象指定的类型。

因此,您可以将 转换age为字符串来修复错误:

interface ObjectTest { name: string, age: number }

function exampleFunction(objectExample: ObjectTest) {
    const url = new URLSearchParams({...objectExample, age: objectExample.age.toString()})
    return url.toString();
};
Run Code Online (Sandbox Code Playgroud)

操场