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

如何从TypeScript接口提取可分配指定类型值的键?

解决TypeScript提取可接受指定类型赋值的属性键问题

问题核心

你需要从接口中筛选出属性值可以接受类型U赋值的键,但之前的类型定义搞反了赋值兼容性的检查方向,导致返回空类型。

错误原因分析

你之前的AssignableProps类型逻辑是找出属性类型T[K]是U的子类型的键——也就是属性值可以赋值给U类型变量,但你需要的是反过来:U类型的值可以赋值给属性,这时候要检查U是否是T[K]的子类型(即U extends T[K])。

正确类型定义

将条件判断的方向反转即可:

type AssignableProps<T, U> = {
  [K in keyof T]: U extends T[K] ? K : never;
}[keyof T];

验证测试

用示例接口Foo测试:

interface Foo {
  num: number;
  str: string;
  nullishNum: number | null | undefined;
  optionalStr?: string;
}

// 提取可接受number | null | undefined赋值的键,结果为"nullishNum"
type TestAssignable = AssignableProps<Foo, number | null | undefined>;

// 其他测试场景
// 提取可接受number赋值的键,结果为"num" | "nullishNum"
type TestNumberAssignable = AssignableProps<Foo, number>;

// 提取可接受undefined赋值的键,结果为"nullishNum" | "optionalStr"
type TestUndefinedAssignable = AssignableProps<Foo, undefined>;

场景适配

这个类型可以直接用于简化数据获取与错误处理:比如后端返回的字段可能包含null/undefined,你可以用它快速筛选出前端接口中能直接接收这些值的属性,避免逐个编写类型判断逻辑,减少重复代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:27:08