【发布时间】:2023-03-08 01:02:01
【问题描述】:
我想正确输入具有以下结构的 Comparator 对象:
const Comparator: ComparatorType = {
string: {
equals: function(a: string, b: string) {...},
notEquals: function(a: string, b: string) {...},
contains: function(a: string, b: string) {...}
...
},
number: {
equals: function(a: number, b: number) {...},
lowerThan: function(a: number, b: number) {...},
greaterThan: function(a: number, b: number) {...}
...
},
datetime: {...}
}
如您所见,一些函数对于多种数据类型(如equal)是通用的,但其他函数是唯一的。我能够想出:
type DataType = "string" | "integer" | "datetime"
type Operation = "equals" | "notEquals" | "contains" | "notContains" | ...
// and define functions:
type CompareStringCommonFunc = (
a: string,
b: string
) => boolean
type CompareIntegerCommonFunc = (
a: number,
b: number
) => boolean
...others...
所以我终于可以像这样想出ComparatorType:
type ComparatorType = {
[dataType in DataType]: {
[funcName in Operation]:
| CompareStringCommonFunc
| CompareStringInFunc
| CompareStringBetweenFunc
| CompareIntegerCommonFunc
| CompareIntegerBetweenFunc
| CompareIntegerInFunc
}
}
但它显然不起作用,因为Comparator 不规则(我的意思是每个DataType 没有所有Operations)而且我的打字稿知识还没有那么深,无法在我的自己的。我该如何解决它,以便我可以为 string DataType 仅分配几个具有特定功能的 Operation 值?
【问题讨论】:
标签: typescript