【发布时间】:2019-12-23 00:54:21
【问题描述】:
formatISODate 函数需要字符串值。
如果不是未定义的,我需要转换许多字符串。 我可以这样做:
{
date1: date1 ? formatISODate(date1) : undefined,
date2: date2 ? formatISODate(date2) : undefined
...
}
为了避免重复相同的三元表达式,我写了下面的函数。
function convertDate<T extends string | undefined>(isoDate?: string): T {
return isoDate ? formatISODate(isoDate) : undefined;
}
但是它有一个类型错误。
错误:“未定义”可分配给“T”类型的约束,但“T”可以用约束“字符串|”的不同子类型实例化。未定义'。
是否可以解决此用例的类型问题?
【问题讨论】:
-
formatISODate有类型参数吗?如果不是,我不确定 T 给你买了什么。这个函数应该只返回 formatISODate | 的返回值。未定义 -
formatISODate 确实有类型,即它需要字符串并返回字符串。 return
string | undefined将在使用date1: convertDate(date1)时显示类型错误,如果 date1 严格来说是一个字符串。 -
我之前看错了。只需将其键入为 convertDate(isoDate?: string): string。假设您没有在 tsconfig 中启用严格的空检查,这应该可以工作(鉴于您的内联三元组似乎正在工作,我怀疑您是否这样做)
标签: typescript typescript-typings typescript-generics