我不明白为什么TypeScript编译器抱怨此代码:
import { withRouter } from 'react-router-dom'
....
//code
....
export default withRouter(yourcomponent)
从根本上讲,此代码有效:import { useState, useEffect } from 'react';
function useSomething<T extends { [key: string]: any }>(): T {
const [state, setState] = useState<T>({}); // Argument of type '{}' is not assignable to parameter of type 'T | (() => T)'.
useEffect(() => {
setState({ hello: 'world' });
});
return state;
}
。
编辑:一个更好的示例,问题基本上是,可以在TypeScript中键入吗?
const t: { [key: string]: any } = { hello: 'world' }
有关代码的一些注释:
import { useState } from 'react';
function useComplexState<T extends Record<string, any>>() {
const [state, setState] = useState<T>({});
const setter = (key: keyof T, value: any) => {
setState((state) => ({ ...state, [key]: value }));
return state;
};
const getter = (key: keyof T) => {
return state[key];
}
return { set: setter, get: getter };
}
interface Person {
firstName: string;
lastName: string;
}
const personState = useComplexState<Person>();
personState.get('firstName');
personState.set('lastName', 'Smith');
始终是对象T
,所以没有人应该能够{}
useComplexState<boolean>
并不是必需的,所以如果我使用T
,则应该在其中仅包含一个通用对象useComplexState()
。Record<string, any>
的默认值为{}
。答案 0 :(得分:0)
在as T
中添加useState<T>({} as T)
修复了每个问题。