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

如何将C#泛型参数Result<T>转换为Angular TypeScript类型

TypeScript 实现 C# 泛型 Result 类型及类型转换问题解决

我需要在 TypeScript 中创建和 C# 类似的泛型参数类型,写代码时遇到了问题。已经完成了 TypeScript 模型的编写,但在执行 Result<class1> modelObj = API_result; 这段代码时卡住了。下面是我的 C# 代码和已写好的 TypeScript 代码,求正确的转换方法。

C# 原代码

public class Result<T> {
    [JsonProperty("recordsTotal")]
    public int recordsTotal { get; set; }

    [JsonProperty("recordsFiltered")]
    public int recordsFiltered { get; set; }

    [JsonProperty("data")]
    public IEnumerable<T> data { get; set; }
}

已编写的 TypeScript 代码

export interface Result<T> {
  recordsTotal: number;
  recordsFiltered: number;
  data: T[];
}

export interface class1 {
  lng_id: number;
  str_name: string;

  // dtresult:DtResult[class1]
}

解决方法

你的 TypeScript 泛型接口定义是正确的,但因为 API 返回的是 JSON 原始对象,无法直接像 C# 那样赋值,需要用 TypeScript 的类型断言或类型守卫来处理:

1. 简单类型断言

适用于你确定 API 返回结构完全符合定义的场景,写法直接:

const modelObj = API_result as Result<class1>;

2. 严格类型校验(类型守卫)

如果需要确保 API 返回数据结构完全匹配定义,避免潜在的结构错误,可以编写类型守卫函数做校验:

// 校验 Result 整体结构的类型守卫
function isResult<T>(obj: unknown, validateItem: (val: unknown) => val is T): obj is Result<T> {
  if (typeof obj !== 'object' || obj === null) return false;
  const res = obj as Result<T>;
  return typeof res.recordsTotal === 'number' 
    && typeof res.recordsFiltered === 'number' 
    && Array.isArray(res.data) 
    && res.data.every(item => validateItem(item));
}

// 校验 class1 结构的类型守卫
function isClass1(val: unknown): val is class1 {
  if (typeof val !== 'object' || val === null) return false;
  const item = val as class1;
  return typeof item.lng_id === 'number' && typeof item.str_name === 'string';
}

// 使用示例
if (isResult(API_result, isClass1)) {
  const modelObj = API_result; // 此处自动推断为 Result<class1> 类型
} else {
  console.error('API 返回数据不符合预期结构');
}

额外建议

TypeScript 中接口名建议遵循大驼峰命名规范(如将 class1 改为 Class1),既符合社区惯例,也能避免和关键字冲突,提升代码可读性。

内容的提问来源于stack exchange,提问作者Dinesh Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:42:38