【发布时间】:2019-03-28 19:18:48
【问题描述】:
我知道这里已经解决了这个问题,但我似乎找不到对我有帮助的解决方案。
我的代码如下:
import * as React from "react";
import inject from "react-jss";
import styles from "./index.styles";
import * as JSS from "jss";
type Colors = "Red" | "White";
interface Props {
onClick: () => void;
disabled: boolean;
classes: JSS.Classes;
color: Colors;
}
const Button: React.StatelessComponent<Props> = (props): React.ReactElement<any> => {
const { children, onClick, classes, disabled, color } = props;
return (
<button onClick={onClick} disabled={disabled} className={[classes.Main, classes[color]].join(" ")}>
{children}
</button>
);
};
Button.defaultProps = {
color: "Red",
disabled: false,
onClick: () => false,
};
export default inject(styles)(Button);
一切看起来都很好,但是当我在没有 color 或 onClick 道具的情况下使用这个组件时,我收到了一个错误:
错误:(14, 8) TS2322: Type '{ children: string; onClick: () => 无效; 禁用:布尔值; }' 不可分配给类型 'Pick'。类型 '{ children: 中缺少属性 'color' 细绳; onClick: () => 无效;禁用:布尔值; }'。
我能做什么?我在 TS3.1.1 上。
【问题讨论】:
-
你使用的是什么版本的 react 和 react 定义?
-
我认为这可能是一个错误,如果我声明
declare const Button: React.ComponentClass<Props> & { defaultProps: typeof defaultProps }它可以工作,如果我声明declare const Button: React.StatelessComponent<Props> & { defaultProps: typeof defaultProps }它不工作,我希望在两种情况下都会选择 defaultprops -
对于直接使用
<Button/>,无状态组件正在使用 TypeScript 的当前master为我工作,因此该错误似乎已得到修复。但是,injectHOC 可能没有使用JSX.LibraryManagedAttributes;我还没有研究过。 -
@MattMcCutchen 这是一个在 3.2 中修复的错误,在 3.1 上不起作用 ..
-
糟糕,再次重复工作。我想要一个更好的方法来避免在 Stack Overflow 上出现这种情况,但我的感觉是试图在元数据上提出它不值得我花精力。
标签: reactjs typescript