3 回答
TA贡献1850条经验 获得超11个赞
这是一个TS Playground,说明了问题和四种可能的解决方案:
type FlexDirection = "column" | "inherit" | "-moz-initial" | "initial" | "revert" | "unset" | "column-reverse" | "row" | "row-reverse" | undefined;
type Styles = {
container: {
flexDirection: FlexDirection
}
}
function doStuff(a: Styles) { }
const stylesDoesNotWork = {
container: { flexDirection: 'column' }
};
const stylesWithCast = {
container: { flexDirection: 'column' as 'column' }
}
const stylesFieldConst = {
container: { flexDirection: 'column' } as const
};
const stylesConst = {
container: { flexDirection: 'column' }
} as const;
doStuff(stylesDoesNotWork);
doStuff(stylesWithCast);
doStuff(stylesFieldConst);
doStuff(stylesConst);
默认情况下,TypeScript 将为string您声明的对象推断类型。您可能会在某处对其进行变异并更改值,在这种情况下,文字类型将不正确。因此,修复它的基本选项是:
手动注释变量,以便 TypeScript 不会推断字符串。
添加
as 'column'cast 以告诉 TypeScript 使用文字类型。在字段或整个对象上使用
as const来告诉 TypeScript 不允许更改字段,这允许 Typescript 推断文字值。
TA贡献1820条经验 获得超10个赞
尝试这个
const styles: { container: React.CSSProperties} = {
container: { flexDirection: 'column' }
};
TA贡献1921条经验 获得超9个赞
导入并使用类型:
import type { Property } from 'csstype'使用 Property.FlexDirection 指定类型
添加回答
举报
