具有 Flow 类型的 JS - 将泛型从外部传递到柯里化函数的内部作用域
JS with Flow types - pass Generic from outer to innerscope of a curried function
有没有办法将外部 Key
类型传递给内部 Key
和内部函数的参数?
我需要所有这些类型都相同。
function getAudienceHelper<Key>(defintions: { [Key]: string }) {
return function<Key>(
prioritisedAudiences: Key[],
...
) {
...
}
}
因此,当我调用 getAudienceHelper
时,我传入了一个字符串枚举类型 AudienceKey
,它直接流向 code
中的其他函数
type AudienceDefs = {
AUDIENCE_1: string,
AUDIENCE_2: string
}
const AUDIENCE_DEFS: AudienceDefs = {
AUDIENCE_1: 'audience_1'
AUDIENCE_2: 'audience_2'
}
type AudienceKey = $Keys<typeof Audience>;
getAudienceHelper<AudienceKey>(AUDIENCE_DEFS)
我正在尝试解决类型问题,想知道我是否过度输入了我的函数。需要多严格?基本上,我想确保我输入的任何内容 - AudienceKey - 与我从 getAudienceHelper
返回的类型相同。从流尝试代码中,getAudienceHelper
必须在内部 运行 两个其他函数 return 相同类型的值。
我通过删除第一个函数中的泛型并将参数更改为对象来解决这个问题。
function getAudienceHelper(defintions: any) {
return function<Key>(
prioritisedAudiences: Key[],
...
) {
...
}
}
当内部函数被调用时,泛型 Key
被初始化,这将被推断并映射到在内部传递的 AUDIENCE_DEFS
。参见 demo code。
const innerFunction = getAudienceHelper(AUDIENCE_DEFS);
innerFunction<AudienceKey>(prioritisedAudiences, ...)
有没有办法将外部 Key
类型传递给内部 Key
和内部函数的参数?
我需要所有这些类型都相同。
function getAudienceHelper<Key>(defintions: { [Key]: string }) {
return function<Key>(
prioritisedAudiences: Key[],
...
) {
...
}
}
因此,当我调用 getAudienceHelper
时,我传入了一个字符串枚举类型 AudienceKey
,它直接流向 code
type AudienceDefs = {
AUDIENCE_1: string,
AUDIENCE_2: string
}
const AUDIENCE_DEFS: AudienceDefs = {
AUDIENCE_1: 'audience_1'
AUDIENCE_2: 'audience_2'
}
type AudienceKey = $Keys<typeof Audience>;
getAudienceHelper<AudienceKey>(AUDIENCE_DEFS)
我正在尝试解决类型问题,想知道我是否过度输入了我的函数。需要多严格?基本上,我想确保我输入的任何内容 - AudienceKey - 与我从 getAudienceHelper
返回的类型相同。从流尝试代码中,getAudienceHelper
必须在内部 运行 两个其他函数 return 相同类型的值。
我通过删除第一个函数中的泛型并将参数更改为对象来解决这个问题。
function getAudienceHelper(defintions: any) {
return function<Key>(
prioritisedAudiences: Key[],
...
) {
...
}
}
当内部函数被调用时,泛型 Key
被初始化,这将被推断并映射到在内部传递的 AUDIENCE_DEFS
。参见 demo code。
const innerFunction = getAudienceHelper(AUDIENCE_DEFS);
innerFunction<AudienceKey>(prioritisedAudiences, ...)