vue.js Typescript如何检查对象属性空键

ndasle7k  于 2023-10-23  发布在  Vue.js
关注(0)|答案(2)|浏览(166)

如何以简单的方式检查TypeScript中对象的属性是否可为空?例如

export default interface UserDto{
     ID?:int;

      USER_NAME?:string;
  
      FIRST_NAME?:string;
  
      LAST_NAME?:string;
  
      USER_ROLE?:string;
  
       TEAM?:string;
     IS_ACTIVE?:Boolean;
    CREATE_DATI?:DateTime;
     UPDATE_DATI?:DateTime;
       PASSWORD?:string;
}

这里的USER_ROLE属性可以为空。我如何在if查询中将其作为可空或不可空返回给我

lf5gs5x2

lf5gs5x21#

如果我理解正确的话,你应该写一个if语句来检查对象的属性是否是optionnal(所以不一定是undefined,但是在类型声明中定义为optionnal)。
这是不可能的,因为类型在运行时不存在。
你所能做的就是检查值,或者硬编码可选键的名称,并在你的条件中使用它。

krugob8w

krugob8w2#

在运行时,这是不可能的,因为所有类型都在编译时被删除(请参阅 “什么是类型擦除?“).
但是你可以在编译时使用条件类型来检查UserDto键是否是可选的。

interface UserDto {
  USER_ROLE?: string;
  REQUIRED: string;
}

type IsOptionalKey<T, K extends keyof T> = {} extends Pick<T, K>
  ? true
  : false;

type Result = IsOptionalKey<UserDto, "USER_ROLE">; // true
type Result2 = IsOptionalKey<UserDto, "REQUIRED">; // false

TypeScriptPlayground

相关问题