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

Required<T>工具类型在二级查找类型中无法生效的问题咨询

Required工具类型在二级查找类型中无法生效的问题咨询

嘿,这个问题我刚好碰到过,来给你捋一捋~

先看你写的这段代码:

type Bravo = {
  b?: string;
}

type Charlie = {
  c: Bravo['b']
}

function acceptsCharlie(value: Charlie){
  // 这里会报错:'value.c' is possibly 'undefined'.(18048)
  value.c.split('');
}

这个报错其实逻辑很通顺,因为Bravo里的b是可选属性,它的类型是string | undefined,那Charlie的c字段继承的就是这个联合类型,TypeScript自然会提醒你value.c可能是undefined,不能直接调用字符串方法。

要解决这个问题,确实可以用Required工具类型,但关键是要用对地方——得先把Bravo转换成所有属性都必填的类型,再去取对应的属性类型,而不是直接在二级查找里套Required。调整后的代码是这样的:

type Bravo = {
  b?: string;
}

// 先通过Required<Bravo>把所有属性设为必填,再获取b的类型
type Charlie = {
  c: Required<Bravo>['b']
}

function acceptsCharlie(value: Charlie){
  // 现在就不会报错啦,因为c的类型已经是确定的string了
  value.c.split('');
}

这么调整之后,Required<Bravo>会把Bravo里的可选属性b转成必填的string类型,Charlie的c字段类型也就变成了纯粹的string,之前的类型错误自然就消失了。

备注:内容来源于stack exchange,提问作者dwjohnston

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:59:35