用户定义的测试是否为PartiallyRequired <sometype>?

时间:2019-03-28 15:40:39

标签: typescript

我该如何编写一个函数来检查某种类型的某些字段是否必需?

IFinancingModel也有statusDetails,在有效融资中可能未定义,因此使用Required<>是不正确的。

export function validFinancing(
    financing: IFinancingModel | undefined,
): financing is Required<IFinancingModel> {
    return !!(
        projectFinancing && 
        projectFinancing.applicationId && 
        projectFinancing.state
    );
}

1 个答案:

答案 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
}