【发布时间】:2021-10-27 13:33:45
【问题描述】:
我想定义一个类型,其中所有属性都是只读的,看起来像 key:string value:string,但 'set' 属性是一个函数。
我尝试了以下方法:
type Attributes = {
readonly [key in Exclude<string, 'set'>]:string
} & {
readonly set: (attr:string, value:string) => void
}
我的问题是Exclude<string, 'set'> 被“简化”回string。有更多经验的人可以解释为什么 TypeScript 会这样做吗?一些建议如何实现我只知道几个属性键(但可以有更多)的类型可以帮助我。
感谢您的宝贵时间和回答!
【问题讨论】:
-
在microsoft/TypeScript#29317 中对否定类型进行了试验,但从未将其纳入语言。所以没有办法说
string & not 'set'。Exclude实用程序类型不会这样做,因为它只会从联合中删除东西,而string不是联合。由于您的主要问题似乎实际上是关于拥有“默认”或“休息”属性,因此我已将其作为重复项关闭,this answer 解释了这些选项。如果我在这里翻译该代码,我会得到this。
标签: typescript