Typescript 强制多个回调具有相同的输入类型而不手动传递泛型
我有以下(简化类型): 这非常有效,TS将认识到回调输入应该是相同的,而不是相同的-我们在第一位Typescript 强制多个回调具有相同的输入类型而不手动传递泛型,typescript,typescript-generics,Typescript,Typescript Generics,我有以下(简化类型): 这非常有效,TS将认识到回调输入应该是相同的,而不是相同的-我们在第一位number,第二位string,第三位空对象中 但是,一旦我传递了数据generic,TS就不再捕获此错误: const fetchAnimals = createQuery<{ id: string, name: string}>( 'FETCH_ANIMALS', (x: number) => ({ url: '/animals', x }), (x: string
number
,第二位string
,第三位空对象中
但是,一旦我传递了数据
generic,TS就不再捕获此错误:
const fetchAnimals = createQuery<{ id: string, name: string}>(
'FETCH_ANIMALS',
(x: number) => ({ url: '/animals', x }),
(x: string) => ({
getData: data => ({ id: data.id, name: x }),
}),
);
fetchAnimals({});
const fetchanies=createQuery(
“取动物”,
(x:number)=>({url:'/animals',x}),
(x:string)=>({
getData:data=>({id:data.id,name:x}),
}),
);
获取动物({});
Typescript将不再显示任何错误。我不明白为什么,因为数据
在理论上与变量
您可以看到这种行为。对于泛型而言,Typescript要么全是,要么全是。这意味着您不能指定某些泛型,而让它推断其他泛型。一旦开始指定泛型,就必须全部指定它们 因为您传入了数据泛型参数,所以它现在需要所有泛型值,而不会推断它们
有很多人要求更灵活的模型,但现在你必须使所有泛型都可以推断,这意味着在参数中的某个地方,或者简单地指定所有泛型(可以使用typeof“读取”现有变量的类型。不要使用
任何。在哪个地方?回调的返回语句是未知的(这是库代码)和冗余,是的,但是字符串
和数字
都适合任何
,如果你想让它们保持一致,只需删除“any”就行了,Typescript不会抱怨“……我不能重现你遇到的问题。你能演示一下吗?@klis87完全不用担心=)哦,我不知道,谢谢!你认为可能有一些解决方法吗?比如使用推断和一些条件来强制推断?我认为方法的返回应该是可推断的。我将尝试为你模拟它
const fetchAnimals = createQuery(
'FETCH_ANIMALS',
(x: number) => ({ url: '/animals', x }),
(x: string) => ({
getData: data => ({ id: data.id, name: x }),
}),
);
fetchAnimals({});
const fetchAnimals = createQuery<{ id: string, name: string}>(
'FETCH_ANIMALS',
(x: number) => ({ url: '/animals', x }),
(x: string) => ({
getData: data => ({ id: data.id, name: x }),
}),
);
fetchAnimals({});