我有一个函数,它接收一个参数,这个参数是一个对象。该函数将返回另一个对象,其中一个属性是传递给函数的对象的值。当我使用obj[key]符号表示法获取对象的值时,出现问题。
我明白,key必须是适当的类型才能像这样使用。如果在接口中没有[key:string]:any,我不能使用简单的字符串作为键。但这不是问题所在。我的键是传递对象中键的字符串联合:'user' | 'name'等。
我的翻译如下所示:
我明白,key必须是适当的类型才能像这样使用。如果在接口中没有[key:string]:any,我不能使用简单的字符串作为键。但这不是问题所在。我的键是传递对象中键的字符串联合:'user' | 'name'等。
interface Twitter<T> {
name: T;
user: T;
sex: T extends string ? boolean : string;
}
interface Facebook<T> {
appName: T;
whatever: T;
imjustanexapmle: T;
}
type TwFbObjKeys = keyof Twitter<string> | keyof Facebook<string>
我的翻译如下所示:
我的函数长这个样子:
public static getArrayOfObjects(
queryParameters: Twitter<string> | Facebook<string>,
) {
const keys = Object.keys(queryParameters) as TwFbObjKeys[];
return keys.map((paramId) => ({
paramId,
value: queryParameters[paramId],
}));
}
我期望使用参数id作为对象的键,该参数类型为'name' | 'sex' | 'appName' | ...,不会引发错误。但是不幸的是,我遇到了以下错误:
TS7053:由于'type'类型的表达式'name' | 'sex' | 'appName' | ...不能用于索引Twitter | Facebook类型,因此元素隐式具有任意类型。 Twitter | Facebook上不存在“name”属性。
我已经花费几个小时在解决这个问题。您有什么解决方法吗?
getArrayOfObjects('appName')
还是getArrayOfObjects({appName: 'asd', .... })
? - John