gpt4 book ai didi

flowtype - 流动。如何根据函数参数指定联合类型

转载 作者:行者123 更新时间:2023-12-04 17:31:16 27 4
gpt4 key购买 nike

假设我们有两种类型和它们的联合:

type A = {tag: 'a'};
type B = {tag: 'b'};
type U = A | B;

以及返回 A 或 B 的函数,具体取决于提供的标签:
const getSpecificObj = (tag: string) => U;

如何指定返回类型?那么我就可以像这样使用它:
const a: A = getSpecificObj('a');

附言是的,我知道我可以为每种类型或覆盖编写相同的函数。但也许还有其他方法。例如在 TS 我可以写:
type Extract<A, T> = A extends { tag: T } ? A : never;
<T>(tag: T): Extract<U, T>

最佳答案

您需要参数化函数 getSpecificObj,而不是返回类型 A 和 B 的联合。通过其参数的类型,然后返回一个引用该类型参数的对象。这是我将如何做到的:

type A = {tag: 'a'};
type B = {tag: 'b'};

function getSpecificObj<T : string>(tag: T) : { tag: T } {
return { tag };
}

const a : A = getSpecificObj('a');
const b : B = getSpecificObj('b');

注释 <T : string>getSpecificObj确保函数不比您需要的更通用,并且只接受字符串作为标签。您可以将其视为移动 string注释掉 tag参数并进入 tag的泛型类型范围。

你可以在try-flow页面查看示例 here .

关于flowtype - 流动。如何根据函数参数指定联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59488719/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com