Typescript 部分需要用户定义的测试<;SomeType>;?
如何编写一个函数来检查类型上的某些字段是否是必需的Typescript 部分需要用户定义的测试<;SomeType>;?,typescript,Typescript,如何编写一个函数来检查类型上的某些字段是否是必需的 IFinancingModel还具有statusDetails,在有效融资中可能未定义,因此使用Required是不正确的 export function validFinancing( financing: IFinancingModel | undefined, ): financing is Required<IFinancingModel> { return !!( projectFinanc
IFinancingModel
还具有statusDetails
,在有效融资中可能未定义,因此使用Required
是不正确的
export function validFinancing(
financing: IFinancingModel | undefined,
): financing is Required<IFinancingModel> {
return !!(
projectFinancing &&
projectFinancing.applicationId &&
projectFinancing.state
);
}
导出功能有效性融资(
融资:如果融资模式未定义,
):需要资金{
返回(
项目融资
projectFinancing.applicationId&&
项目融资。国家
);
}
您可以使用拾取
选择该类型的某些属性,使其成为必需的属性,并使其与原始属性相交以生成所需的类型:
type RequireSome<T, K extends keyof T> = Required<Pick<T, K>> & T;
interface IFinancingModel {
applicationId?: number;
state?: string;
statusDetails?: string
}
export function validFinancing(
financing: IFinancingModel | undefined,
): financing is RequireSome<IFinancingModel, 'applicationId' | 'state'> {
return !!(
financing &&
financing.applicationId &&
financing.state
);
}
declare let o: IFinancingModel | undefined;
if (validFinancing(o)) {
o.applicationId.toExponential // number
o.state.anchor; // string
o.statusDetails.big // err can be undefined
}
类型RequireSome=Required&T;
界面融资模型{
applicationId?:编号;
状态?:字符串;
状态详细信息?:字符串
}
导出函数有效性融资(
融资:如果融资模式未定义,
)当前位置融资是必需的{
返回(
融资及
financing.applicationId&&
国家财政
);
}
声明let o:IFinancingModel |未定义;
if(有效融资(o)){
o、 applicationId.toExponential//number
o、 state.anchor;//字符串
o、 statusDetails.big//err可以是未定义的
}
IFinancingModel看起来像什么?什么是PartiallyRequired
?这可能是您想要的:只是好奇,您如何使RequiredSome
也从属性中删除null
Required
似乎只删除了未定义的
…@Aaron,这是可以完成的,但不能使用Required
我们需要一个更复杂的带有条件的类型。让我试一试,我会发布itI想出的{[P in K]-?:NonNullable}&Pick
,但似乎太复杂了。。。(很抱歉劫持答案)@Aaron这就是我拥有的:type required和notnull={[P in keyof T]-?:Exclude}type RequireSome=required和notnull&T
如果属性为string | null |未定义
且与string
相交,则该属性将变为string
无需进行任何额外拾取