I want to define jsx like this:
<table style={{'--length': array.length}}>
<tbody>
<tr>{array}</tr>
</tbody>
</table>
and I use --length
in CSS, I also have cells that have --count
that shows count using CSS pseudo selector (using the counter hack).
but typescript throws an error:
TS2326: Types of property 'style' are incompatible.
Type '{ '--length': number; }' is not assignable to type 'CSSProperties'.
Object literal may only specify known properties, and ''--length'' does not exist in type 'CSSProperties'.
is it possible to change the type of style attribute to accept CSS variables (custom properties) or is there a way to force any on the style object?
Casting the style
to any
defeats the whole purpose of using TypeScript, so I recommend extending React.CSSProperties
with your custom set of properties:
import React, {CSSProperties} from 'react';
export interface MyCustomCSS extends CSSProperties {
'--length': number;
}
By extending React.CSSProperties
, you will keep TypeScript's property checking alive and you will be allowed to use your custom --length
property.
Using MyCustomCSS
would look like this:
const MyComponent: React.FC = (): JSX.Element => {
return (
<input
style={
{
'--length': 300,
} as MyCustomCSS
}
/>
);
};