.NET Core泛型类如何转换为TypeScript泛型接口?
.NET Core泛型模型转TypeScript泛型接口问题
.NET Core后端泛型模型
public class ViewDataLayerModel<T> { [JsonPropertyName("DATA")] public List<T> Data {get; set;} = new List<T>(); [JsonPropertyName("CURRENT_PAGE")] public long Page {get; set;} = 1; [JsonPropertyName("TOTAL_PAGES")] public long TotalPages {get; set;} [JsonPropertyName("MAX_RECORDS")] [Range(1, 500)] public int MaxRecords {get; set;} = 500; }
原TypeScript接口(存在问题)
export interface DataLayer { Data: Array<object>; CURRENT_PAGE: number ; TOTAL_PAGES: number ; MAX_RECORDS: object | null; }
遇到的错误
Argument of type 'object[]' is not assignable to parameter of type '{review...
正确的TypeScript泛型接口实现
你需要定义泛型接口匹配.NET的泛型模型,同时保证接口字段名和JSON序列化后的键完全一致,类型也要对应:
export interface ViewDataLayerModel<T> { DATA: T[]; CURRENT_PAGE: number; TOTAL_PAGES: number; MAX_RECORDS: number; }
关键修正点:
- 泛型定义:在接口名后添加
<T>,和.NET泛型对应,让DATA数组可以指定具体元素类型,避免用宽泛的object导致类型不匹配 - 字段名对齐:.NET通过
JsonPropertyName指定了JSON输出的键名,TypeScript接口的键必须和这些名称完全匹配(比如用DATA而非Data,CURRENT_PAGE对应后端Page字段的JSON别名) - 类型修正:
MAX_RECORDS是数字类型(对应.NET的int),不是object | nullCURRENT_PAGE和TOTAL_PAGES用number即可,TypeScript的number兼容.NET的long
使用示例
比如处理评论类型数据,先定义评论接口:
interface Review { id: number; content: string; author: string; }
再用泛型接口指定具体类型:
// 接收后端返回的评论分页数据 const reviewData: ViewDataLayerModel<Review> = await fetch('/api/reviews').then(res => res.json()); // 此时reviewData.DATA的类型为Review[],能获得完整类型提示,不会出现赋值错误
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

