复杂类型对象中可选 属性 的打字稿类型
Typescript type of optional property within complex type object
我正在尝试获取在复杂类型中找到的可选 属性 的 type
,如下例所示。解决起来可能很简单,但我找不到解决方案。
type ComplexType = {
lvl0: {
title: string;
lvl1: {
title: string;
lvl2?: {
title: string;
lvl3: {
title: string;
}
}[]
}[]
}[]
}
type lvl3Type = ComplexType["lvl0"][0]["lvl1"][0]["lvl2"][0]["lvl3"];
最后一个 [0]
有错误。我将如何解决 lvl3Type
?
你的错误,强调我的:
Property '0' does not exist on type '{ title: string; lvl3: { title: string; }; }[] | undefined'.
正如您的问题标题,lvl2
是可选的:它被定义为 lvl2?
。如果 lvl2
未定义,lvl2[0]
将抛出错误,因此 TypeScript 告诉您不能将 [0]
应用于可能未定义的类型。
使用 utility type NonNullable<T>
来避免这个问题并获得你想要的类型。
type lvl3Type =
NonNullable<ComplexType["lvl0"][0]["lvl1"][0]["lvl2"]>[0]["lvl3"];
不幸的是,您需要这样的实用程序而不是 !
,正如 kaya3 在评论中指出的那样: !
仅适用于表达式,不适用于类型,以表明表达式 value 不为空或未定义。
我正在尝试获取在复杂类型中找到的可选 属性 的 type
,如下例所示。解决起来可能很简单,但我找不到解决方案。
type ComplexType = {
lvl0: {
title: string;
lvl1: {
title: string;
lvl2?: {
title: string;
lvl3: {
title: string;
}
}[]
}[]
}[]
}
type lvl3Type = ComplexType["lvl0"][0]["lvl1"][0]["lvl2"][0]["lvl3"];
最后一个 [0]
有错误。我将如何解决 lvl3Type
?
你的错误,强调我的:
Property '0' does not exist on type '{ title: string; lvl3: { title: string; }; }[] | undefined'.
正如您的问题标题,lvl2
是可选的:它被定义为 lvl2?
。如果 lvl2
未定义,lvl2[0]
将抛出错误,因此 TypeScript 告诉您不能将 [0]
应用于可能未定义的类型。
使用 utility type NonNullable<T>
来避免这个问题并获得你想要的类型。
type lvl3Type =
NonNullable<ComplexType["lvl0"][0]["lvl1"][0]["lvl2"]>[0]["lvl3"];
不幸的是,您需要这样的实用程序而不是 !
,正如 kaya3 在评论中指出的那样: !
仅适用于表达式,不适用于类型,以表明表达式 value 不为空或未定义。