打字稿错误,类型 'string' 不可分配给类型 'never'



我正在使用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只是中等水平。)

最新更新