简体   繁体   English

在分配之前使用变量“test” - Typescript

[英]Variable 'test' is used before being assigned - Typescript

I am getting error in this implementation of typescript code.我在这个打字稿代码的实现中遇到错误。 I am mapping here one type to another.我在这里将一种类型映射到另一种类型。 But vscode shows error that variable 'test' is used before being assigned.但是 vscode 显示在分配之前使用了变量“test”的错误。 can anyone please help?有人可以帮忙吗?

interface A {
   name: string;
   age: string;
   sex: string;
}

interface B {
   name: any;
   age: string;
   sex: string;
 }

const modifyData = (g : B) :A => {

    let test: A;
    test.name = g.name['ru'];
    test.age = g.age;
    test.sex = g.sex;

   return test as A;
};

const g = [{
  "name": {
      "en": "George",
      "ru": "Gregor"
       },
  "age": "21",
  "sex": "Male"
},
{
  "name": {
      "en": "David",
      "ru": "Diva"
       },,
  "age": "31",
  "sex": "Male"
}];

const data = g.map(modifyData);
console.log(data);

To clarify a little, this hinges on the difference between "assigned" and "defined."澄清一下,这取决于“已分配”和“已定义”之间的区别。 For example:例如:

let myDate: Date; // I've defined my variable as of `Date` type, but it still has no value.

if (!someVariable) {
   myDate = new Date();
}

console.log(`My date is ${myDate}`) // TS will throw an error, because, if the `if` statement doesn't run, `myDate` is defined, but not assigned (i.e., still has no actual value).
   

Defining simply means giving it an initial value:定义只是意味着给它一个初始值:

let myDate: Date | undefined = undefined; // myDate is now equal to `undefined`, so whatever happens later, TS won't worry that it won't exist.

It is indeed unassigned.它确实是未分配的。 It is defined, but it has no value.它被定义了,但它没有价值。

In my humble opinion, the cleanest way would be to return a literal:在我看来,最干净的方法是返回一个文字:

const modifyData = (g: B):A => {
    return {
        name: g.name['ru'],
        age: g.age,
        sex: g.sex
    } as A;
};
let test!: A;

add a '!'添加一个“!” after variable name变量名后

see: typescript/playground请参阅: 打字稿/游乐场

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM