我有一个包含多种类型的值的对象:interface Foo { id: number; data: FooData; username: string; notes: string;}const foo: Foo = { ...}我有一个需要字符串的函数,并遍历对象中要在该函数中使用的特定字段列表,所有这些字段都包含字符串值:const renderString = (value: string) => { ...}const fooKeys: keyof Foo = ["username", "notes"];fooKeys.map((key) => { renderString(foo[key])}问题是foo[key]可以是string,number或FooData对象,因此我想指定foo[key]仅是Foo的字段值,并且键匹配,因为它们都是字符串值。我们可以断言fooKeys,但这不能保护我们免受fooKeys中的错误键的侵害。 最佳答案 一种选择是使用条件类型仅允许string属性,因为这似乎是唯一允许的属性?例如:type StringPropsOnly<T> = { [Key in keyof T]: T[Key] extends string ? Key : never;}[keyof T]const fooKeys: StringPropsOnly<Foo>[] = ["username", "notes"];fooKeys.map((key) => { renderString(foo[key])});TypeScript Playground关于javascript - 如何使用特定的键子集键入对象字段的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57962080/ 10-12 06:55