gpt4 book ai didi

生成函数的 TypeScript 通用类型

转载 作者:行者123 更新时间:2023-12-05 01:49:56 25 4
gpt4 key购买 nike

如何为动态创建的函数声明泛型类型?

type FooType = {
username: string;
}

type BarType = {
age: number;
}

interface DataStore {
foo: FooType;
bar: BarType;
}

const getDataStore = () => ({
foo: { username: 'Tera' },
bar: { age: 24 },
})

const generateFunction = <T, S extends keyof DataStore>(slice: S) => {
type DataSlice = DataStore[S];

return (selector: (store: DataSlice) => T) => selector(getDataStore()?.[slice]);
}

如何在 useFoo 中使用 T 并传递 generateFunction

const useFoo = generateFunction('foo');

useFoo的预期用法

type UserName = string;

const userName = useFoo<UserName>((foo: FooType) => foo.userName);

最佳答案

您正在寻找通用匿名函数(参见 this SO answer )。

const generateFunction = <S extends keyof DataStore>(slice: S) => {
type DataSlice = DataStore[S];

return <T,>(selector: (store: DataSlice) => T) => selector(getDataStore()?.[slice]);
}

请注意,T 泛型现在与返回的函数相关联,而不是 generateFunction 本身。正如您在问题中所写,generateFunction 是一个通用函数,它采用两个通用参数 TS在调用该函数时已知。相反,您希望 generateFunction 接受调用时已知的单个通用参数 S,并让它返回具有单个通用参数 T 的函数这只有在调用返回的函数时才知道。

关于生成函数的 TypeScript 通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73644962/

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