Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 部分需要用户定义的测试<;SomeType>;?_Typescript - Fatal编程技术网

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
无需进行任何额外拾取