我正在使用typeORM和typegraphql,并且我正在定义解析器。
我想遍历对象并全部更改。
但是我得到了下面这个错误,不知道为什么。
userResolver.ts
// Change User Information
@Mutation(() => UserResponse)
async changeUserInfo(
@Arg("info") info: UserInformationInput,
@Ctx() {req}: MyContext
): Promise<UserResponse|undefined> {
....
....
/////////////////////////////
const testObject = {
spp: "asdf",
slsl: "asdssf",
}
console.log("Before testObject Iteration:", testObject)
let tkey: keyof typeof testObject;
for (tkey in testObject) {
testObject[tkey] = "llll"; // No Error with test Object!
}
console.log("After testObject Iteration:", testObject);
console.log("Before info Iteration:", info);
let k: keyof typeof info;
for (k in info) {
info[k] = "mamamama"; // <-- Error!
// Type 'string' is not assignable to type 'never'.
}
console.log("After info Iteration:", info);
/////////////////////////////
....
....
}
UserInformationInput.ts
import { Field, InputType } from "type-graphql";
@InputType()
export class UserInformationInput {
@Field()
userId: string;
@Field()
firstName: string;
@Field()
lastName: string;
@Field()
userName: string;
@Field()
age: number;
@Field()
email: string;
@Field()
password: string;
@Field()
sex: string;
@Field()
univ: string;
}
'testObject'和'info'有什么区别?
我如何遍历和改变'info'的值?
不同的是,testObject
的属性都是string
类型,但UserInformationInput
的属性是字符串,还有一个属性(age
)不是字符串(具体来说,它是number
)。如果从中读取值,则info[k]
的类型为string | number
,因为在一般情况下,k
可能引用UserInformationInput
的任何属性。因为它可能引用类型为number的属性,所以不能给它赋值字符串。(如果您像这样添加非字符串属性,您将获得与testObject
相同的错误。)
(错误消息的措辞确实让我感到惊讶,但我现在对TypeScript只是中等水平。)