Typescript “如何访问”;“类型”;可选属性的属性?
请参阅下面的代码片段:Typescript “如何访问”;“类型”;可选属性的属性?,typescript,Typescript,请参阅下面的代码片段: 接口MyObj{ myOptionalProp:MyOptionalPropObj;//非可选 } 界面肌视神经本体{ myProp1:某种类型; myProp2?:某种类型; } 类型Test1=MyObj['myOptionalProp']['myProp1'];//作品 类型Test2=MyObj['myOptionalProp']['myProp2'];//作品 如果myoptionprop不是可选的,则访问MyObj中要分配给Test1和Test2的嵌套属性
接口MyObj{
myOptionalProp:MyOptionalPropObj;//非可选
}
界面肌视神经本体{
myProp1:某种类型;
myProp2?:某种类型;
}
类型Test1=MyObj['myOptionalProp']['myProp1'];//作品
类型Test2=MyObj['myOptionalProp']['myProp2'];//作品
如果myoptionprop
不是可选的,则访问MyObj
中要分配给Test1
和Test2
的嵌套属性可以正常工作
不过。一旦myOptionalProp是可选的:
接口MyObj{
myOptionalProp?:MyOptionalPropObj;//可选
}
界面肌视神经本体{
myProp1:某种类型;
myProp2?:某种类型;
}
类型Test1=MyObj['myOptionalProp']['myProp1'];//不起作用
类型Test2=MyObj['myOptionalProp']['myProp2'];//不起作用
TypeScript引发以下错误:
Property 'myProp1' does not exist on type 'MyOptionalPropObj | undefined'.ts(2339)
在访问类型时是否有一种断言方法?类似于
myObj.myOptionalProp!.myProp1
但是对于类型
s
本例中的
MyObj
类型在我们的情况下是自动生成的,特别是GraphQL代码生成器,我们无法控制它的结构。我们可以直接使用类型SomeType
,但目前这不是一个选项
自动生成的类型示例如下:
导出类型TestQuery=(
{{uuuu typename?:'Query'}
&{简介:也许}
);
在本例中,我们无法访问profile
的owner
属性,因为owner可以是未定义的
TestQuery['profile']['owner'] // Doesn't work
如果属性是可选的,则其类型为未定义的并集,并且由于只有并集的公共属性可访问,因此原始类型的所有属性都将不可访问 您需要从联合中删除
未定义的。预定义的条件类型Exclude
将实现以下功能:
interface MyObj {
myOptionalProp?: MyOptionalPropObj; // OPTIONAL
}
interface MyOptionalPropObj {
myProp1: string;
myProp2?: number;
}
type Test1 = Exclude<MyObj['myOptionalProp'], undefined>['myProp1']; //ok
type Test2 = Exclude<MyObj['myOptionalProp'], undefined>['myProp2']; // ok
接口MyObj{
myOptionalProp?:MyOptionalPropObj;//可选
}
界面肌视神经本体{
myProp1:字符串;
myProp2?:编号;
}
类型Test1=Exclude['myProp1']//好啊
类型Test2=Exclude['myProp2'];//好啊
如果我们开始进一步挖掘,这看起来会很难看,但确实有效。是否有替代方法?创建一些DeepRequired
类型,以从所有属性中删除null
和undefined
?创建一些助手类型KeyOf=Exclude[K]
?我想有几种方法可以简化它……谢谢!这就是我们要找的。现在就行了。