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
相关产品推荐
相关产品推荐

