看哪,反应打字稿组件:
interface ComponentProps<A> {
actions: A;
onAction(key: keyof A): void;
}
function Component<A>(props: ComponentProps<A>) {
return <div>{/* ... */}</div>;
}
<Component
actions={{ a: 'one', b: 'two' }}
onAction={action => {
action; // type is "a" | "b"
}}
/>;
我想强制执行:A extends {[key: string]: string}
但我不想将action
的类型更改为string
。我仍然希望这是"a" | "b"
我该怎么做?当我添加A extends {[key: string]: string}
时,它会将action
的类型(从onAction
中的用法)更改为string
。
任何想法为什么?