我正在尝试执行以下操作:
interface Collection {
foo: string,
bar: string
}
const patchCollection = (
collection: Collection,
propertyToUpdate: {[key: keyof Collection]: any}
) => {
// do something here
}
Run Code Online (Sandbox Code Playgroud)
目标是拥有key: "foo" | "bar"但我收到以下错误:
索引签名参数类型不能是文字类型或泛型类型。考虑使用映射对象类型代替
但我不确定映射对象在这里如何应用。有什么帮助吗?谢谢!
编辑:
由于存在类似的问题,该问题已结束。我尝试了那里提供的解决方案,但没有设法使其与Mapped type一起使用。但是,我能够使用部分实用程序类型解决我的问题(https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype)
interface Collection {
foo: string,
bar: string
}
const patchCollection = (
collection: Collection,
propertyToUpdate: Partial<Collection>
) => {
// do something here
}
Run Code Online (Sandbox Code Playgroud)
这还解决了将正确的值类型与正确的键关联的问题(我之前没有解决这个问题)。我不确定我是否以错误的方式使用映射和索引类型(以及是否有办法用它们来实现它),但Partial绝对看起来是我从一开始就应该采取的正确方法。
我正在尝试构建一个简单的笔记应用程序。目前,我关注的是使用不同文本样式设置文本的可能性(例如正文、标题、粗体、斜体等)。我用 aNSAttributedString来设置不同的文本样式。现在,我想检测所选文本应用了哪种样式。
我认为一个好方法是创建一个自定义 NSAttributedString。Key,以便我可以在设置属性时分配它(例如.textStyle: "headline",并在需要检测它时读取它。我尝试将其实现为 NSAttributedString.Key 的扩展,但没有成功。正确的方法是什么?有更好的选择吗?