【发布时间】:2020-01-11 13:54:01
【问题描述】:
在我的应用中,我收到来自 API 的响应,该响应具有以下模式。
export interface IApiResponseBody<T = any> {
Error?: string;
Message?: string;
RowsAffected?: number;
Success?: boolean;
Data?: T;
RowCount?: number;
}
我没有问题将接口分配给响应,然后我可以访问响应中的元素。我遇到的问题是当我尝试通过T 为Data 分配接口时,就像
let myData: IApiResponseBody<IPerson> = {
Success: true,
Error: "",
Message: "",
RowsAffected: 9,
Data: [{name: 'Steve', age: 26, gender : 'male'},
{name: 'Susan', age: 21, gender : 'female'},
{name: 'SteveFrank', age: 29, gender : 'male'}]}
无论我使用 Data 中的数组还是简单的 Doc,都会出现错误。
TSError:⨯ 无法编译 TypeScript:index.ts:9:5 - 错误 TS2559: 键入'{名称:字符串;年龄:数字;性别:字符串; }[]' 没有 与“IPerson”类型相同的属性。
9 数据:[{name:'Steve',年龄:26,性别:'male'}, ~~~~
那么我如何将接口应用到我的Data 元素,无论它是文档数组还是简单文档。
这是 Repl.it 上上述代码的链接
【问题讨论】:
-
可能是一个简单的错误?您的数据 (
myData.Data) 是一个数组,但您的界面是一个普通类型。接口定义不应该包括Data?: T[](即一个T数组而不是T)吗?或者myData应该是IApiResponseBody<IPerson[]>? -
在旁注中,我强烈建议不要添加
success:true, error等或任何表明失败的内容。使用标准的 http 代码,然后使用错误信息扩展 that 响应正文。如果您的 api 成功返回 200 和所需的 http 消息正文。这样你就可以创建一个更纯粹的 restful api。
标签: angular typescript