TypeScript 中是不是有在类中使用的关键字来获取其类型?
Posted
技术标签:
【中文标题】TypeScript 中是不是有在类中使用的关键字来获取其类型?【英文标题】:Is there a keyword in TypeScript used inside a class to get its type?TypeScript 中是否有在类中使用的关键字来获取其类型? 【发布时间】:2020-12-24 21:51:06 【问题描述】:我想从类内部引用类的类型而不使用它的名称
所以如果类的名称发生变化,我不需要在多个地方更改我的代码, 即使我的类名很长,我的代码也不会再出现, 当我看到这个关键字时,我立即知道它指的是什么,而无需查找类型。这就是我现在的样子:
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
只返回一个字符串。
【问题讨论】:
我认为不重复MyClassThatMightHaveAQuiteLongName
至少一次是不可能的,因为您需要指定this
才能正确键入myProp
自我引用
如果您使用 IDE 重命名类,第一点就消失了。如果你的类名太长,你无法引用它们,是不是它们太长了,其他人无法引用它们,你应该选择一个更好的名字来代替?
@IngoBürk 你是对的,但是,long 是相对的。即使你为你的类选择“正常长度”的名称,如果你在一个“框架环境”中,比如说 Angular,一些用于此目的的 TypeScript 关键字可以让你在MyShortNamedComponent
中节省很多字符。
【参考方案1】:
如果你使用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
【讨论】:
哇,谢谢,我不知道public
有这个区别。为什么会这样?这正是我想要的,但是如果属性是private
,为什么这个选项不可用?
@tom this
是一种特定类型,旨在由构建器方法返回给类的用户。因此,它不包括私有属性。以上是关于TypeScript 中是不是有在类中使用的关键字来获取其类型?的主要内容,如果未能解决你的问题,请参考以下文章