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

TypeScript如何包装接口属性?区分类型使用不同泛型类

解决方案

先定义一个用来识别原始类型的辅助类型:

type Primitive = string | number | boolean | null | undefined | symbol | bigint;

接着实现能区分原始类型/非原始类型的包装类型:

type FromInterface<I> = {
  [K in keyof I]: I[K] extends Primitive 
    ? MyGeneric<I[K]> 
    : MyGenericContainer<I[K]>;
};

现在用这个类型处理你的接口:

type ISomeWrappedInterface = FromInterface<ISomeInterface>;

生成的类型完全符合需求:原始类型属性用MyGeneric包装,非原始类型(比如ISomeOtherInterface)用MyGenericContainer包装。

原代码错误说明

你之前的代码里MyGeneric<typeof T>是错误的,原因是:

  • T(换成K语义更准确)是keyof I的类型,也就是属性名的类型(比如"propertyA"),它本身已经是类型,不能用typeof操作符(typeof用于获取值的类型,而非类型的类型)。
  • 要获取属性对应的类型,应该用I[K]访问接口I中键K对应的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:20:17