类中是否使用TypeScript中的关键字来获取其类型?

问题描述

我想从类内部引用类的类型而不必使用其名称

  • 因此,如果类名更改,则无需在多个位置更改代码
  • 即使我的班级名很长,我的代码也不再可用
  • 当我看到此关键字时,无需查找类型即可立即知道它指的是什么。

这就是我现在的样子:

class MyClassthatMightHaveAQuiteLongName {

  private myProp: SomeType;

  someMethod() {
    let foo: MyClassthatMightHaveAQuiteLongName['myProp']; // to make foo a SomeType
  }

}

这就是我想要的方式:

class MyClassthatMightHaveAQuiteLongName {

  private myProp: SomeType;

  someMethod() {
    let foo: thatMagicKeyword['myProp']; // to make foo a SomeType
  }

}

只是为了说明我想要的东西:

class MyClassthatMightHaveAQuiteLongName {

  private myProp: SomeType;

  someMethod() {
    let foo: (typeof this)['myProp']; // to make foo a SomeType
  }

}

显然不能作为typeof返回的只是一个字符串。

解决方法

如果您使用public myProp,则可以使用'this'

class MyClassThatMightHaveAQuiteLongName {
    public myProp: SomeType;

    someMethod() {
        let foo: this['myProp']; // to make foo a SomeType
    }
}

您还可以使用类型别名来缩短类名,假设所有类都在不同文件中。

type ThisClass = MyClassThatMightHaveAQuiteLongName

export class MyClassThatMightHaveAQuiteLongName {
    public myProp: SomeType;

    someMethod() {
        let foo: ThisClass['myProp']; // to make foo a SomeType
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...