You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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;
}

关键修正点:

  1. 泛型定义:在接口名后添加<T>,和.NET泛型对应,让DATA数组可以指定具体元素类型,避免用宽泛的object导致类型不匹配
  2. 字段名对齐:.NET通过JsonPropertyName指定了JSON输出的键名,TypeScript接口的键必须和这些名称完全匹配(比如用DATA而非Data,CURRENT_PAGE对应后端Page字段的JSON别名)
  3. 类型修正:
    • MAX_RECORDS是数字类型(对应.NET的int),不是object | null
    • CURRENT_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:05:09