我该如何编写一个函数来检查某种类型的某些字段是否必需?
IFinancingModel
也有statusDetails
,在有效融资中可能未定义,因此使用Required<>
是不正确的。
export function validFinancing(
financing: IFinancingModel | undefined,
): financing is Required<IFinancingModel> {
return !!(
projectFinancing &&
projectFinancing.applicationId &&
projectFinancing.state
);
}
答案 0 :(得分:3)
您可以使用Pick
选择该类型的某些属性,并使其成为必需属性,并将其与原始属性相交以产生所需的类型:
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
}