Reactjs TS2339:属性高度不存在于';{}';,在分解可能未定义的对象时
我正在尝试对可选类型的道具进行如下分解:Reactjs TS2339:属性高度不存在于';{}';,在分解可能未定义的对象时,reactjs,typescript,Reactjs,Typescript,我正在尝试对可选类型的道具进行如下分解: export interface Props { style: object; } const MyComponent: React.FC<Props> = ({ style }) => { const { width, height, ...newStyle } = style || {}; 如何解决此问题?您已将样式声明为简单的对象,它也没有宽度或高度 使用适当的类型信息定义样式。例如,如果这是HTML元素的style属
export interface Props {
style: object;
}
const MyComponent: React.FC<Props> = ({ style }) => {
const { width, height, ...newStyle } = style || {};
如何解决此问题?您已将
样式
声明为简单的对象
,它也没有宽度
或高度
使用适当的类型信息定义样式
。例如,如果这是HTML元素的style
属性,则正确的类型是CSSStyleDeclaration
:
export interface Props {
style: CSSStyleDeclaration;
}
const MyComponent: React.FC<Props> = ({ style }) => {
const { width, height, ...newStyle } = style || {};
// ...
};
…至少。事实上,您正在将其他属性收集到
newStyle
中,这表明您可能需要更多。您正在应用默认值的事实表明,样式
本身应该标记为可选(?
)。您没有想到吗?如果未定义样式,则破坏的对象实际上既没有宽度也没有高度。你能不能从一开始就有一个比object更具体的类型?我如何在界面中定义样式来避免这个警告?样式有什么道具?除了你在这里展示的两个,我们不能告诉你。此外,无论界面中有什么,您的默认值也应该匹配。你不想“逃避”警告,TypeScript告诉你你的代码没有意义,这很有帮助。我编辑了这个问题。这是一个标准的本地道具。这是一种风格。所有对象属性都是可选的。IIRC即使在默认设置中也有多个样式类型;例如,视图和文本具有不同的样式。但是如果所有的道具都是可选的,那么它可能没有宽度和高度。谢谢。作为将来的参考,我如何以及在哪里可以找到我需要的CSSStyleDeclaration
。这些都列在某个地方吗?(顺便说一句,我需要ViewStyle
)@raarts-恐怕我不知道React Native的答案。对于DOM内容,我查看了HTMLElement
上声明的style
类型是什么,它使用的是TypeScript:-)
export interface Props {
style: CSSStyleDeclaration;
}
const MyComponent: React.FC<Props> = ({ style }) => {
const { width, height, ...newStyle } = style || {};
// ...
};
interface Props {
style: {
width?: number;
height?: number;
}
}