【发布时间】:2019-10-27 08:15:08
【问题描述】:
是否可以有一个接受泛型参数的 const 值?
对于这个代码
import * as R from 'ramda';
enum ApiActionType {
requested,
completed,
failed,
cancelled,
}
type ApiActionTypeKeys = keyof typeof ApiActionType;
enum ChangedActionType {
changed,
}
type ChangedActionTypeKeys = keyof typeof ChangedActionType;
const getActionType = <TPrefix, TActionTypeKeys extends string>(
keys: TActionTypeKeys[]
) => (
prefix: TPrefix
): Record<TActionTypeKeys, [TPrefix, TActionTypeKeys]> => {
return R.pipe(
R.map(k => [k, [prefix, k]] as [TActionTypeKeys, [TPrefix, TActionTypeKeys]]),
R.fromPairs as () => Record<TActionTypeKeys, [TPrefix, TActionTypeKeys]>
)(keys);
}
// const createApiActionType: <TPrefix>(prefix: TPrefix) => Record<"requested" | "completed" | "failed" | "cancelled", [TPrefix, "requested" | "completed" | "failed" | "cancelled"]>
const createApiActionType = <TPrefix>(prefix: TPrefix) => getActionType<TPrefix, ApiActionTypeKeys>(R.keys(ApiActionType))(prefix)
// const createChangedctionType: <TPrefix>(prefix: TPrefix) => Record<"changed", [TPrefix, "changed"]>
const createChangedctionType = <TPrefix>(prefix: TPrefix) => getActionType<TPrefix, ChangedActionTypeKeys>(R.keys(ChangedActionType))(prefix)
是否可以在不丢失结果函数的通用参数的情况下将最后两行简化为下面?即保留TPrefix 泛型参数,而不是成为具有unknown 前缀类型的非泛型函数
// const createApiActionType: (prefix: unknown) => Record<"requested" | "completed" | "failed" | "cancelled", [unknown, "requested" | "completed" | "failed" | "cancelled"]>
const createApiActionType = getActionType(R.keys(ApiActionType))
// const createChangedctionType: (prefix: unknown) => Record<"changed", [unknown, "changed"]>
const createChangedctionType = getActionType(R.keys(ChangedActionType))
【问题讨论】:
-
看起来与stackoverflow.com/questions/54363310/… 相关。怀疑 Typescript 中是否有可能有无数可变参数类型
标签: typescript