【发布时间】:2019-04-22 07:27:50
【问题描述】:
这个带有泛型的代码 sn-p 工作得很好 (Link to Simple and Working Code)
const state: Record<string, any> = {
isPending: false,
results: ['a', 'b', 'c']
}
const useValue = <T extends {}>(name: string): [T, Function] => {
const value: T = state[name]
const setValue: Function = (value: T): void => {
state[name] = value
}
return [value, setValue]
}
const [isPending, setIsPending] = useValue<boolean>('isPending')
const [results, setResults] = useValue<string[]>('results')
在这里我可以确定isPending 是一个布尔值,setIsPending 接收一个布尔值作为参数。同样适用于 results 和 setResults 作为字符串数组。
然后我用另一种方法包装代码useStore (Link to Extended Broken Code)
interface UseStore {
state: Record<string, any>
useValue: Function
}
const state: Record<string, any> = {
isPending: false,
results: ['a', 'b', 'c']
}
const useStore = (): UseStore => {
const useValue = <T extends {}>(name: string): [T, Function] => {
const value: T = state[name]
const setValue: Function = (value: T): void => {
state[name] = value
}
return [value, setValue]
}
return { state, useValue }
}
const { useValue } = useStore()
const [isPending, setIsPending] = useValue<boolean>('isPending')
const [results, setResults] = useValue<string[]>('results')
最后两行给我打字错误:Untyped function calls may not accept type arguments.
我怀疑useStore 接口有问题,但由于它的动态特性,我想不出更好的解决方案。
如何在使用 Generic 类型获得正确的类型提示和代码完成时摆脱错误?
【问题讨论】:
标签: javascript typescript generics