-
Notifications
You must be signed in to change notification settings - Fork 12.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mimicking JSX attributes behaviour with object types #28960
Comments
bug/error documented here: microsoft/TypeScript#28960
It seems like this can be solved in TypeScript 4.4 with template literal types as object keys: import * as React from 'react';
type DataAttributeKey = `data-${string}`;
interface HTMLAttributes extends React.HTMLAttributes<any> {
[dataAttribute: DataAttributeKey]: any;
}
function Component(props: { host: HTMLAttributes }) {
return <div {...props.host} />
}
<Component host={{
'data-testid': 'component',
'role': 'generic',
// @ts-expect-error
shouldError: 1
}} /> |
Possibly related: #47211 |
in vue3 typescript I am having some property does not exist in the HtmlElement error. please help me to solve this issue. (property) dataButtons: string (property) data-buttons: string Type '{ class: string; dataButtons: string; "data-buttons": string; }' is not assignable to type 'HTMLAttributes'. Property 'dataButtons' does not exist on type 'HTMLAttributes'.ts(2322) |
Together with module augmentation it can be defined once in a global type definitions module, e.g. import 'react';
declare module 'react' {
export interface HTMLAttributes<T> {
[dataAttribute: `data-${string}`]: any;
}
} Not sure why this isn't supported in |
Nobody proposed the change yet. It may not be trivial to do since adding properties may break existing typechecking. Somebody just needs to own this change. |
Search Terms
jsx object invalid data attribute nested component react
Suggestion
We have this behaviour for JSX:
https://www.typescriptlang.org/docs/handbook/jsx.html#attribute-type-checking
I want this same behaviour but for object types. This is necessary for times when we want to pass some props as a nested object (for whatever reason). Currently this errors:
As far as I'm aware, there's currently no way to extend the above props type to allow for this behaviour.
Checklist
My suggestion meets these guidelines:
The text was updated successfully, but these errors were encountered: