アプリケーションで次のエラーが発生します(npm 5.4.2、react 15.4、TypeScript 2.5.3、webpack 2.2.1、webpack-dev-server 2.4.1)。
これは動作します:
<div style={{position: 'absolute'}}>working</div>
これはコンパイルされません:
const mystyle = {
position: 'absolute'
}
<div style={mystyle}>not working</div>
コンパイルエラーは次のとおりです。
ERROR in ./src/components/Resource.tsx
(61,18): error TS2322: Type '{ style: { position: string; }; children: string; }' is not assignable to type 'DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>'.
Type '{ style: { position: string; }; children: string; }' is not assignable to type 'HTMLAttributes<HTMLDivElement>'.
Types of property 'style' are incompatible.
Type '{ position: string; }' is not assignable to type 'CSSProperties'.
Types of property 'position' are incompatible.
Type 'string' is not assignable to type '"inherit" | "initial" | "unset" | "fixed" | "absolute" | "static" | "relative" | "sticky"'.
webpack: Failed to compile.
しかし、違いは何ですか?私はそれを修正できます:
const mystyle = {
position: 'absolute' as 'absolute'
}
しかし、これは良い解決策ですか?
他のスタイル/ CSSプロパティではこの問題はありません。
私はgithubで同様の問題を見つけました: https://github.com/Microsoft/TypeScript/issues/11465 しかし、それを正しく理解すれば、それは旧バージョンのTypeScriptバグ。
任意の助けに感謝します。
これは回避策ですが、大丈夫です。他の解決策は次のとおりです。
const mystyles = {
position: 'absolute',
} as React.CSSProperties;
この issue が解決されると、再度確認できます。マイルストーンで判断すると、TS 2.6あたりです。
React.CSSPropertiesタイプを使用します。
import React, { CSSProperties } from "react";
const myStyles: CSSProperties = {
position: 'absolute',
}
次に、通常どおりスタイルを使用します。
<div style={myStyles} />