flowtype 函数重载错误:“无法决定选择哪种情况。”

Bug*_*ggy 5 javascript flowtype

TS-通过

[{name: 1}]匹配{ value: T }[]T[]选择第一个签名,返回正确的类型T[]

// TS example
function transformDataToForm<T>(data: { value: T }[]): T[];
function transformDataToForm<T>(data: T[]): T[];
function transformDataToForm<U, T extends { value?: U }>(data: T[]): (T | U)[] {
    return data.map(item => item.value ? item.value : item);
}

const res1: {name: number}[] = transformDataToForm([{name: 1}]);
const res2: number[] = transformDataToForm([{value: 1}]);                                    
Run Code Online (Sandbox Code Playgroud)

流程 - 错误

我认为对于流程来说应该只存在一个匹配的签名。

declare function transformDataToForm<T>(data: { value: T }[]): T[];
declare function transformDataToForm<T>(data: T[]): T[];
function transformDataToForm<U, T: { value?: U }>(data: T[]): (T | U)[] {
    return data.map(item => item.value ? item.value : item);
}        

const res1: {name: number}[] = transformDataToForm([{name: 1}]);
//                             ^ Could not decide which case to select. Since case 1 [1] may work but if it doesn't case 2 [2] looks promising too. To fix add a type annotation to inferred union of array element types (alternatively, provide an annotation to summarize the array element type) [3]      

// const res2: number[] = transformDataToForm([{value: 1}]);                                    
Run Code Online (Sandbox Code Playgroud)

尝试流量

在 Flow 中使用函数重载的正确方法是什么?

正确的类型是什么transformDataToForm