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

TypeScript中如何为特定对象键指定专属类型

解决TypeScript宠物对象的类型约束问题

你写法里的["dog" in Pet]是错误语法,TypeScript不支持这种写法。要实现你要的约束,得用映射类型+类型映射表来完成,以下是正确的实现方案:

正确代码示例

type Pet = 'dog' | 'cat'
type DogName = 'Jack' | 'Fenton'
type CatName = 'Priscilla' | 'Kittykat'

// 先建立宠物类型到对应名字类型的映射表
type PetNameMap = {
  dog: DogName;
  cat: CatName;
}

// 生成符合要求的Pets类型
type Pets = {
  [K in Pet]: { [Name in PetNameMap[K]]: boolean }
}

// 正确使用(注意你原代码里的KittyKat是大小写错误,要和定义的Kittykat一致)
const pets: Pets = {
  dog: {
    Jack: true
  },
  cat: {
    Kittykat: true
  }
}

逻辑说明

  • [K in Pet]会遍历Pet联合类型的所有成员(dog和cat),确保对象只能有这两个键,无法新增Pet之外的宠物类别。
  • PetNameMap[K]会根据当前键K自动匹配对应的名字类型:K为dog时取DogName,K为cat时取CatName。
  • 内层的{ [Name in PetNameMap[K]]: boolean }保证每个宠物的子对象只能使用对应允许的名字作为键,值限定为布尔类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:45:43