type customizeEmitsType = {};type HasEmit<T, E> = E extends keyof T ? T[E] : undefined;interface _ConfigItem<T = string> { on: HasEmit<customizeEmitsType, T>; }
这里 on 属性仍然是必填的?
如何修改才能在 customizeEmitsType 里面没有对应属性时不用填呢?
/** * 判断类型是否相同 */type Equal<Left, Right> = (<U>() => U extends Left ? 1 : 0) extends (<U>() => U extends Right ? 1 : 0) ? true : false/** * 判断是否为可选类型 */type IsOptional<T> = Equal<T | undefined, T>type customizeEmitsType = { a: string};type HasEmit<T, E> = E extends keyof T ? T[E] : undefined;// 如果是可选的类型,on后面加?设置为可选类型,否则不加?type _ConfigItem<T = string> = IsOptional<HasEmit<customizeEmitsType, T>> extends true ? { on?: HasEmit<customizeEmitsType, T>; } : { on: HasEmit<customizeEmitsType, T>; }
在 TypeScript 中,当你定义一个接口的属性为某个类型时,该属性默认是必需的。如果你想让某个属性变成可选的,你可以使用 ?
后缀来标记它。
在你提供的代码中,_ConfigItem
接口的 on
属性被定义为一个类型,而这个类型依赖于泛型 T
是否是 customizeEmitsType
的一个键。但是,即使 T
不是 customizeEmitsType
的一个键,on
的类型仍然是 undefined
,而不是可选的。
为了让 on
属性在 customizeEmitsType
中没有对应属性时变成可选的,你可以使用条件类型来定义 _ConfigItem
接口,这样当 T
不是 customizeEmitsType
的键时,on
属性就会变成一个可选的属性。下面是如何实现它的示例:
type customizeEmitsType = {};type HasEmit<T, E> = E extends keyof T ? T[E] : undefined;interface _ConfigItem<T = string> { on?: HasEmit<customizeEmitsType, T>; }
在上面的代码中,我在 on
属性后面添加了 ?
后缀,这样它就变成了一个可选的属性。现在,当 T
不是 customizeEmitsType
的一个键时,on
属性将变成可选的,并且其类型为 undefined
。如果 T
是 customizeEmitsType
的一个键,则 on
属性将变成必需的,并且其类型为 T[E]
。
我希望data是否必传由A[T]是否有必传属性决定。如何做呢?
我刚刚注意到javadoc状态(强调为我的): 返回声明中包含的此枚举常量的名称。该方法可能被重写,尽管它通常不是必需的或不需要的。当存在更“程序员友好”的字符串窗体时,枚举类型应重写此方法。 默认情况下,和返回相同的内容,因此即使被重写,仍然可以通过方法访问枚举的名称。 编辑:供参考,的javadoc(强调与原文相同): 返回此枚举常量的名称,与在其枚举声明中声明的名称完全相同。大多数程序员应该
我对同步块有一些疑问。在提问之前,我想分享另一个相关帖子链接的答案,以回答相关问题。我引用彼得·劳里的同一个答案。 > <块引号> 同步确保您对数据有一致的视图。这意味着您将读取最新值,其他缓存将获得最新值。缓存足够智能,可以通过特殊总线相互通信(JLS不需要,但允许)该总线意味着它不必触摸主存储器即可获得一致的视图。 如果您只使用同步,则不需要Volatile。如果您有一个非常简单的操作,而同步
定义一个类型 条件1:变量类型是一个字符串。 条件2:变量值不是 get "typescript": "~5.2.2"
怎样从当前数据库的状态来判断是否需要读写分离,最好经验丰富的老师来回答下。 我当前想到的是,是否可以通过 QPS/TPS 的值来判断呢?
我正在使用验证用户电话号码。目前在我的情况下,我有一个屏幕,用户把电话号码和第二个屏幕上的otp。根据文件自动检索otp并在大多数情况下启动验证过程。所以我的问题是,它已经在Firebase Auth SDK中实现了这个,或者我应该自己实现它来检索SMS和自动填充OTP。