如何为动态创建的函数声明泛型类型?
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]);
}
我如何在use Foo
中使用T
并传递的生成函数
?
const useFoo = generateFunction('foo');
< code>useFoo的预期用法
type UserName = string;
const userName = useFoo<UserName>((foo: FooType) => foo.userName);
你正在寻找通用的匿名函数(见这个SO回答)。
const generateFunction = <S extends keyof DataStore>(slice: S) => {
type DataSlice = DataStore[S];
return <T,>(selector: (store: DataSlice) => T) => selector(getDataStore()?.[slice]);
}
请注意,T
泛型现在与返回的函数相关联,而不是的生成函数
本身。正如你的问题中所写的,生成函数
是一个泛型函数,它接受两个泛型参数T
和S
,这两个参数在调用函数时是已知的。相反,您希望生成函数
接受一个调用时已知的泛型参数S
,并让它返回一个函数,其中只有在调用返回的函数时才知道一个泛型参数T
。
(沙盒) 获取此错误: 类型“number”不可分配给类型“T”“number”可分配给“T”类型的约束,但“T”可以用约束{}的不同子类型实例化。(2322)输入。ts(1,26):预期类型来自此签名的返回类型。 我希望typescript能够自动推断T为数字,然后直接使用它。为什么它在抱怨?写这样的东西的正确方法是什么?谢谢
我想通过TypeScript泛型定义函数返回类型。所以R可以是我将定义的任何东西。 <代码>。。。许诺 错误:(29,9)TS2322:类型“字符串”不可分配给类型“R”。“字符串”可分配给类型“R”的约束,但“R”可以用约束“{}”的不同子类型实例化。
Spring4包含了对泛型类型解析的主要增强,但当包含bean类的type参数被参数化时,我无法自动生成泛型类型。 我需要跟踪提交给外部服务的作业的状态,并且我想在每个作业启动时为其创建一个条目,并在收到回发时清除或更新它。我通常会尝试将持久性策略与服务接口分开,因此我有一个接口,一个Spring数据Mongo类。由于作业可能会在外部服务有机会为其分配ID(例如HTTP 502)之前失败,因此我需
运算符“+”不能应用于类型“T”和“number”
我试图在打字稿中使用泛型,这样泛型参数将被用作索引来调用存储在对象中的函数。 我收到的错误是: [ts]不能调用类型缺少调用签名的表达式。类型'((变量:{插入ID:数字;})= 或 “QueryInput[T]”类型的参数不能分配给“{insertId:number;”类型的参数 下面是复制该问题的示例代码: 似乎Typescript引擎无法解析函数的正确签名-尽管肯定只有一个可能的签名(从返回
我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。