typescript 在接口中使用Never类型,引发错误

cs7cruho  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(202)

我这里有一些代码,IDE在NEVER类型字段上向我抛出了一个错误。我不太确定我应该做些什么来满足这个IDE。我将isAnonymous字段设置为false,所以我假设我应该将primaryIdentityHas和primaryIdentitySpace都保留为空,但当我这样做时,它抱怨我缺少这些字段。有人能给我提供一些关于这个问题的见解吗?

export const getOneDSCoreFieldsUnAuth = (
context: TelemetryLoggerContext,
): CoreFields => {
return {
    app: {
        name: context.appName,
        platform: '',
        version: '1',
    },
    session: {
        id: context.correlationId,
    },
        user: {
            isAnonymous: true,
        },
    };
};

export declare namespace User {
interface Contract {
    primaryIdentityHash?: string;
    primaryIdentitySpace?: string;
    tenantId?: string;
    tenantGroup?: string;
    isAnonymous?: boolean;
}
type StrictContractKnownUser = {
    primaryIdentityHash: string;
    primaryIdentitySpace: PrimaryIdentitySpace;
    tenantId?: string;
    tenantGroup?: string;
    isAnonymous?: false;
};
type StrictContractUnknownUser = {
    primaryIdentityHash: never;
    primaryIdentitySpace: never;
    tenantId?: never;
    tenantGroup?: never;
    isAnonymous: true;
};
type StrictContract = StrictContractKnownUser | StrictContractUnknownUser;
}

我收到以下错误消息。
类型"{是匿名:true ;}"不能赋给类型" StrictContract "。类型" {isAnonymous:类型"StrictContractUnknownUser"中缺少以下属性:主要身份散列、主要身份空间(2322)数据模型。d. ts(193,5):预期类型来自此处在类型"CoreFields"上声明的属性"user"

0md85ypi

0md85ypi1#

never是一个类型,它意味着“不能给这个赋值”(甚至不能是未定义的或空的)。你有一个必需的属性,你不能给它赋值--这是不能满足的。
一种解决方案可能是要求它们是never和可选的,如果您尝试使用一个既为isAnonymous又为never字段传递值的对象,这将导致错误:

type StrictContractUnknownUser = {
  primaryIdentityHash?: never,
  primaryIdentitySpace?: never,
  tenantId?: never,
  tenantGroup?: never
  isAnonymous: true
}

或者,对于功能相同的事情,您可以简单地从类型中省略它们:

type StrictContractUnknownUser = {
    isAnonymous: true
}

相关问题