【发布时间】:2021-07-05 01:13:19
【问题描述】:
考虑以下代码:(这里也是示例代码https://codesandbox.io/s/hbtew?file=/src/index.ts)
enum Types {TEXT, DATE}
interface TextState {
type: typeof Types.TEXT
}
interface DateState {
type: typeof Types.DATE
}
type State = TextState | DateState;
interface GenericProps {
state: State
}
interface InputProps<AnyState> {
state: AnyState;
}
function TextInput(props: InputProps<TextState>) {
}
function DateInput(props: InputProps<DateState>) {
}
const props: GenericProps = {state: {type: Types.TEXT}};
/*
Type 'State' is not assignable to type 'TextState'.
Type 'DateState' is not assignable to type 'TextState'.
Types of property 'type' are incompatible.
Type 'Types.DATE' is not assignable to type 'Types.TEXT'
*/
TextInput(props);
const {state} = props;
/*
Type 'State' is not assignable to type 'TextState'.
Type 'DateState' is not assignable to type 'TextState'
*/
TextInput({state: state});
/* OK */
TextInput({state: {type: Types.TEXT}});
/* OK */
DateInput({state: {type: Types.DATE}});
如您所见,调用 TextInput(props) 时出错。您能否解释一下它是如何出现该错误的以及您将如何修复代码以便调用TextInput(props) 不会出错?目的是能够构造不同的GenericProps,只有type不同,可以传递给TextInput(props)(如果props = {state: {type: Types.TEXT}})或者DateInput(props)(如果props = {state: {type: Types.DATE}}),谢谢!
【问题讨论】:
标签: reactjs typescript typescript-generics