简体   繁体   English

打字稿为keyof不工作分配值

[英]Typescript assign value for keyof not working

I have a problem:我有个问题:
- I do not assign for value of variable temp as code below - 我没有为变量temp 的值赋值如下代码
Please, how to assign value to variable temp请问,如何为变量temp赋值
Following code below:以下代码如下:

interface Base {
      a: number;
      b: number;
      c: string;
 }

interface Child extends Base {
  d: string;
}

const data: Child = {
  a: 1,
  b: 2,
  c: "1",
  d: "2"
}

function check<T extends Base>(obj: T, key: string) {
  const keys: any[] = Object.keys(obj);
  type dataTypes = keyof T;
  for (let m in keys) {

    // error: 
    // Type 'string' is not assignable to type 'keyof T'.
    //  Type 'string' is not assignable to type '"a" | "b" | "c"
    const temp: dataTypes = m; //error

  }
}

function test(data: Base) {
  check(data, "d")
}

Object.keys(obj) returns string[] , that's why m is a string, but dataTypes is "a" | "b" | "c" Object.keys(obj)返回string[] ,这就是为什么m是字符串,而dataTypes"a" | "b" | "c" "a" | "b" | "c" "a" | "b" | "c" ( union type ), ie more restrictive. "a" | "b" | "c"联合类型),即更具限制性。 So you can't assign a string to a variable of type "a" | "b" | "c"所以你不能将字符串分配给类型为"a" | "b" | "c"的变量"a" | "b" | "c" "a" | "b" | "c" "a" | "b" | "c" . "a" | "b" | "c"

The solution is simple: don't use Object.keys(obj) :解决方案很简单:不要使用Object.keys(obj)

function check<T extends Base>(obj: T, key: string) {
  type dataTypes = keyof T;
  for (let m in obj) {
    const temp: dataTypes = m;
  }
}

Replace for (let m in keys) { by for (var i=0; i< keys.length; i++) {替换for (let m in keys) { by for (var i=0; i< keys.length; i++) {

for (var i=0; i< keys.length; i++) {

    const temp: dataTypes = keys[i]; //no error

  }

用:

const temp = m as keyof T;

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

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