类型'string'不能分配给''inherit'|类型 "初始"| "未设置"| "固定"| "绝对"| "静态"| "亲戚"| "黏"'

gfj*_*fjr 25 typescript reactjs webpack

我的应用程序中出现以下错误(npm 5.4.2,反应15.4,typescript 2.5.3,webpack 2.2.1,webpack-dev-server 2.4.1).

这将有效:

<div style={{position: 'absolute'}}>working</div>
Run Code Online (Sandbox Code Playgroud)

这不会编译:

const mystyle = {
    position: 'absolute'            
} 

<div style={mystyle}>not working</div>
Run Code Online (Sandbox Code Playgroud)

编译错误是:

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.
Run Code Online (Sandbox Code Playgroud)

但有什么区别?我可以解决它:

const mystyle = {
    position: 'absolute' as 'absolute'            
} 
Run Code Online (Sandbox Code Playgroud)

但这是一个很好的解决方案吗?

我对其他样式/ css属性没有这个问题.

我在github上发现了一个类似的问题:https: //github.com/Microsoft/TypeScript/issues/11465 但如果理解正确的话,那就是ealier版本中的打字稿错误.

任何帮助赞赏.

And*_*eos 40

这是一种解决方法,但没关系.其他一些解决方案是:

const mystyles = {
   position: 'absolute',
} as React.CSSProperties;
Run Code Online (Sandbox Code Playgroud)

您可以在解决此问题时查看.在TS 2.6附近我想,从里程碑来看.


Kar*_*ski 12

您可以使用 const 断言让 TypeScript 推断整个对象的文字值:

const mystyle = {
    position: 'absolute'            
} as const;
Run Code Online (Sandbox Code Playgroud)

这样,如果您向 中添加更多属性mystyle,它也将适用于它们。


小智 9

如果您有嵌套的样式对象,superluminary的答案将不起作用。在这种情况下,您可以创建一个类型:

import React, { CSSProperties } from 'react';

export interface StylesDictionary{
    [Key: string]: CSSProperties;
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

const styles:StylesDictionary  = {
    someStyle:{
        display:'flex',
        justifyContent:'center',  
    },
    someOtherStyle:{
        display:'flex',
        justifyContent:'center',
        alignItems:'center',
        
    }
}
Run Code Online (Sandbox Code Playgroud)

进而:

<div style={styles.someStyle} />
Run Code Online (Sandbox Code Playgroud)


sup*_*ary 7

使用React.CSSProperties类型:

import React, { CSSProperties } from "react";

const myStyles: CSSProperties = {
  position: 'absolute',
}
Run Code Online (Sandbox Code Playgroud)

然后只需正常使用样式即可:

<div style={myStyles} />
Run Code Online (Sandbox Code Playgroud)