web-dev-qa-db-ja.com

Reactとtypescriptのスタイル属性でCSS変数を定義する方法

私はこのようにjsxを定義したいです:

<table style={{'--length': array.lenght}}>
   <tbody>
      <tr>{array}</tr>
   </tbody>
</table>

また、cssで--lengthを使用していますが、css疑似セレクターを使用して(counter hackを使用して)カウントを示す--countを持つセルもあります。

typeScriptはエラーを表示します:

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'.

css変数(カスタムプロパティ)を受け入れるようにスタイル属性のタイプを変更することは可能ですか、またはスタイルオブジェクトに強制する方法はありますか?

18
jcubic

CSSProperties の定義に移動すると、次のように表示されます。

export interface CSSProperties extends CSS.Properties<string | number> {
    /**
     * The index signature was removed to enable closed typing for style
     * using CSSType. You're able to use type assertion or module augmentation
     * to add properties or an index signature of your own.
     *
     * For examples and more information, visit:
     * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors
     */
}

そのリンクは、Properties内のcsstypeの定義を拡張するか、プロパティ名をanyにキャストすることにより、型エラーを解決する方法の例を示しています。

7
Matt McCutchen

このような:

render(){
  var style = { "--my-css-var": 10 } as React.CSSProperties;
  return <div style={style}>...</div>
}
25
ixrock

型アサーションを変数に追加できます。 つまり{['--css-variable' as any]: value }

<table style={{['--length' as any]: array.lenght}}>
   <tbody>
      <tr>{array}</tr>
   </tbody>
</table>
4