【发布时间】:2020-03-10 14:30:07
【问题描述】:
我目前正在将基于jss 的样式解决方案转换为typescript,但我遇到了以下情况。
考虑一下我的基本设置
import { useStyles } from './styles'
const styles = theme =>({
root : { color: 'white' },
foo : { backgroundColor: 'red' },
})
const Component = () =>{
const classes = useStyles(styles)
return <div className={classes.root} />
}
您将样式对象传递给useStyles,返回值是一个对象,其中包含在styles 中声明的所有键。所以我的classes 对象看起来像这样
{
root : 'random-name123',
foo : 'random-name124'
}
由于我不可能知道styles 将有哪些键,我当前的classes 接口只是一个字典
interface Classes {
[index: string]: string
}
我的问题是:
我能否声明一个interface,使传递给styles 的所有键都声明为Classes 的一部分?这样当我输入classes. 时,我就能看到classes 的所有可能键?
换句话说,我希望组成Classes 的键是可预测的。这样,如果我通过 styles 这样的对象
{
foo : {/*...*/},
bar: {/*...*/}
}
我的Classes 界面看起来像
{
foo : string,
bar : string
}
【问题讨论】:
-
您能否编辑上述代码以构成minimal reproducible example,以便有人可以将其放入IDE 并给出他们可以先测试的答案?现在我的猜测是您希望
useStyles成为一个generic 函数,其输出类型取决于其输入类型。但是如果没有可用的示例代码,我不知道这是否是您真正想要的。祝你好运! -
喜欢this 可能吗?但我不知道
useStyles实际做了什么,所以我不知道那个签名是否合适。 -
这能回答你的问题吗? Interface type check with Typescript
-
@jcalz 问题是我有很多样板代码要在沙箱中重现。我已经更新了这个问题。这有帮助吗?案例还不够,我会尝试在沙箱中重现它
-
两个答案都对我有帮助。我仍然有一些问题,但与问题的范围无关。我只是在等待一点接受一个。希望大家多多点赞哈哈哈
标签: reactjs typescript