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

如何用映射类型定义基于数组的TypeScript接口(遵循DRY)

如何用映射类型定义可扩展的接口?

你已经通过映射类型生成了对应的类型结构,但TypeScript的接口语法不支持直接在内部写映射类型。不过可以通过接口继承映射类型的方式实现需求,既遵循DRY原则,又保留接口可被实现、扩展的特性。

实现步骤:

  1. 保留你已有的基础定义:
const qualities = ["beauty", "cost", "upkeep"] as const
export type QualityStrings = (typeof qualities)[number]
  1. 用映射类型生成基础属性结构的类型别名:
type QualitiesBase = {
    [V in QualityStrings]: number
}
  1. 让目标接口继承这个类型别名:
export interface QualitiesInterface extends QualitiesBase {}

这样生成的QualitiesInterface和你手动定义的接口完全等价,同时可以正常被其他接口扩展或被类实现:

扩展接口示例:

export interface ExtendedQualities extends QualitiesInterface {
    durability: number // 新增属性
}

实现接口示例:

class FurnitureQualities implements QualitiesInterface {
    beauty = 8
    cost = 15
    upkeep = 3
}

这种方式既复用了QualityStrings的定义,避免了重复编写属性名,又保留了接口的所有特性,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:40:57