【发布时间】:2019-08-08 00:48:16
【问题描述】:
我正在扩展 styled-components 模块,例如
import "styled-components";
declare module "styled-components" {
type Breakpoint = "small" | "medium" | "large" | "extra";
export interface DefaultTheme {
devices: { [P in keyof Breakpoint]: number };
colors: {
main: string;
secondary: string;
};
}
}
我在这里使用它
import { DefaultTheme } from "styled-components";
const breakpoints = {
small: 576,
medium: 768,
large: 992,
extra: 1200
};
const theme: DefaultTheme = {
devices: Object.fromEntries<string>(
Object.entries(breakpoints).map(([k, v]) => [k, `(min-width: ${v}px)`])
),
colors: {
main: "blue",
secondary: "red"
}
};
export default theme;
如何在这里获得适当的类型安全性?我遇到的2个问题:
theme.devices:
Type '{ [x: string]: string; [x: number]: string; }' is missing the following properties from type '{ [x: number]: number; toString: number; charAt: number; charCodeAt: number; concat: number; indexOf: number; lastIndexOf: number; localeCompare: number; match: number; replace: number; search: number; slice: number; ... 34 more ...; trimRight: number; }': charAt, charCodeAt, concat, indexOf, and 40 more.
在我尝试使用它的地方,我得到了所有字符串方法以及自定义断点属性,而我只想拥有断点属性
`@media ${props => props.theme.devices.small}` {
【问题讨论】:
标签: typescript