【问题标题】:Typescript instantiate exact type of property打字稿实例化确切类型的属性
【发布时间】:2022-08-18 21:47:59
【问题描述】:

首先让我说我不想要typeof 运算符。

假设我有这些课程

export function InstantiateMe(): PropertyDecorator {
  return (target: object, propertyKey: string | symbol) => {

    Reflect.defineMetadata(
      `instantiate`,
      {
        propertyKey,
      },
      target
    );
  };
}

export class MySuperClass {
  @InstantiateMe();
  property1: MyGoodClass;
  @InstantiateMe();
  property2: MyBetterClass;

  foo: Bar;
}

export class MyGoodClass {
  Name = \'I am good\'
}

export class MyBetterClass{
  Name = \'I am better\';
}

export class Bar{
  Name = \'I am nothing\';
}

现在考虑我想实例化所有用@InstantiateMe DYNAMICALLY 装饰的属性的场景(即我不想做property1 = new MyGoodClass();)。

假设我以某种方式获得了MySuperClass 的实例(例如const x = new MySuperClass()),所以property1property2 都是undefined。我现在如何(可能使用反射)在不明确知道接受哪些类型的情况下实例化这两个属性。

请注意,我确实有 @InstantiateMe 装饰器,因此如果需要,实际上可以在那里定义/存储一些额外的信息。如果没有,请忽略它。

public instantiateAllDecoratedProperties(target: object) : void {
  // Now the fun part.
}

最终对象应如下所示

{
  property1 : {
      Name: \'I am good\'
  },
  property2 : {
      Name: \'I am better\'
  },
  foo: undefined
}

    标签: typescript


    【解决方案1】:

    打字稿类型没有运行时存在。你将无法做到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-27
      • 2019-03-12
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2018-08-14
      相关资源
      最近更新 更多