angular - Typescript/Angular 12:将自定义对象转换为参数对象
问题描述
我想使用 的fromObject
键HttpParamsOptions
将自定义对象转换为参数对象。
这有效:
foo(): void {
const testObject = {
id: 123;
name: 'test';
someExample: 'test';
}
const httpParams = new HttpParams({ fromObject: testObject });
...
}
这不起作用:
export interface SearchParams {
id: number;
name: string;
someExample: string;
}
foo(testObject: SearchParams): void {
const httpParams = new HttpParams({ fromObject: testObject });
...
}
fromObject
如果我定义对象类型,则不起作用。
错误:TS2322:类型 'SearchParams' 不可分配给类型 '{ [param: string]: string | 号码 | 布尔值 | 只读(字符串|数字|布尔)[];}'。“SearchParams”类型中缺少索引签名。
任何想法如何解决这个问题?我正在使用 Angular 12。
解决方案
最简单的方法:
const httpParams = new HttpParams({ fromObject: {...testObject} });
发生错误是因为您的参数类型SearchParams
与 fromObject 类型不匹配,即:
fromObject?: {
[param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;
};
基本上fromObject
param 接受任何文字对象。
因此,您可以通过一些不同的方式获得相同的结果。例如...
声明一个文字对象(就像你一样):
const testObject = {
id: 123;
name: 'test';
someExample: 'test';
}
const httpParams = new HttpParams({ fromObject: testObject });
使用扩展运算符声明从另一个对象复制的对象:
const myObject = { ...testObject };
const httpParams = new HttpParams({ fromObject: myObject });
或转换为any
类型:
const httpParams = new HttpParams({ fromObject: testObject as any });
从关于类型的打字稿文档any
:
当你不想写出一个长类型来让 TypeScript 相信特定的代码行是可以的时,any 类型很有用。
或者将接口更改为与参数类型SearchParams
兼容:fromObject
export interface SearchParams {
id: number;
name: string;
someExample: string;
[param: string]: string | number;
}
foo(testObject: SearchParams): void {
const httpParams = new HttpParams({ fromObject: testObject });
}
推荐阅读
- javascript - 我在 Google 应用程序脚本中运行以下脚本 - 发送 cc 和 bcc 的响应
- python-3.x - 基于依赖数据的抽样
- html - 如何将元素放在内联元素下?
- python - 在 python 中绘制多年的月度异常
- java - 如何使用 java + spring 代码实现将 MFT 服务器与暴露的 rest 连接以执行上传、下载和列出文件等操作
- c++ - 带有-Wshadow警告的C ++结构化绑定?
- react-native - React native on double backpress 显示白屏
- javascript - 如何使用 v-once 通过单击按钮再次触发
- c++ - 如何在 C++ 中的调试器中隐藏特定函数
- reactjs - 为什么反应常数返回空白或空?