1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
//// [index.tsx]
interface Elements {
foo: { callback?: (value: number) => void };
bar: { callback?: (value: string) => void };
}
type Props<C extends keyof Elements> = { as?: C } & Elements[C];
declare function Test<C extends keyof Elements>(props: Props<C>): null;
<Test
as="bar"
callback={(value) => {}}
/>;
Test({
as: "bar",
callback: (value) => {},
});
<Test<'bar'>
as="bar"
callback={(value) => {}}
/>;
//// [index.jsx]
<Test as="bar" callback={function (value) { }}/>;
Test({
as: "bar",
callback: function (value) { }
});
<Test as="bar" callback={function (value) { }}/>;
|