Typescript keyof返回字符串数组

und*_*ned 4 javascript typescript

假设我有一节课:

class Test { 
  propA;
  propB;
  propC;
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个返回字符串数组的方法,并将其键入只有Test类中存在的键,我该如何使用该keyof功能?

 class Test { 
      propA;
      propB;
      propC;

   getSomeKeys() : keyof Test[] {
     return ['propA', 'propC']
   }
 }
Run Code Online (Sandbox Code Playgroud)

Lus*_*ito 11

你需要keyof Test用括号括起来:

 class Test { 
   //...
   getSomeKeys() : (keyof Test)[] {
     return ['propA', 'propC']
   }
 }
Run Code Online (Sandbox Code Playgroud)

但请注意,在这种情况下,keyof还包括getSomeKeys.

  • 为了解决您指出的问题,您可以创建一个自己的过滤器,例如`type Filter<K extends keyof Test> = K extends "getSomeKeys" | “另一个过滤方法”?never : K` 然后像这样使用它 `Array<Filter<keyof Test>>` [TypeScript playgound](https://www.typescriptlang.org/play/?noImplicitAny=false#code/AQYwNghgzlwCoFMoBdgG9gFgBQw-4AcAnAewIEFgBeYAcgloG4d9DSCAha4ARmd1bBiZAMLcA2rVoBdfi2ABzBMgDKJ ALYIA0ggCEUABQBKYAC5g5IkQi6APADEAlmGQIitgNZ6SAM3hJkAD5A9Hk8ImUAVyIAO2BJYQpaABo6RJEZeQBfHBzsHGRdAgRgJxc3Wy1gBAAPVxiAE1gvXV9-FBCaKtr6puAAIiVVDW09KH7gAB8BiBiSZAALNw BZZQWSBrgSMtciCYB+ YBiEADc3M2AtIA) (2认同)
  • 确实如此,但现在有一个内置类型:`Exclude<keyof Test, "getSomeKeys">` (2认同)

ton*_*y19 6

用途Array<keyof Test>:

class Test {
    propA;
    propB;
    propC;

    getSomeKeys(): Array<keyof Test> {
        return ['propC'];
    }
}
Run Code Online (Sandbox Code Playgroud)

演示