0

我有一个a用 type 声明的变量string,但未初始化。有没有办法获取string类型而不是undefined

> let a:string;
undefined
> console.log(typeof a);
undefined
4

2 回答 2

2

是的,有一种方法可以在 typescript 中获取类型元数据,但是您必须在 typescript 编译器配置中激活反射元数据选项并导入反射元数据 polyfill,这将增加您的包大小。

这里找到更合适的访问打字稿类型的例子。

于 2021-04-06T13:38:55.170 回答
0

由于无法在运行时获取类型;并基于@deceze 的评论(单独保存元数据)

如果它可以帮助某人,这种解决方法可以完成这项工作。它不使用反射decorators

> class C {
  constructor(
     public var1?:string, 
     public var2?:string, 
     public var3?:number
  ) {}
  typeof(v) {
     switch (v) {
     case 'var1':
     case 'var2':
       return 'string';
     case 'var3':
       return 'number';
     }
   }
}
> let c = new C();
> console.log(Object.keys(c).map( 
     a => {
       console.log( ' Var: ' + a + 
                    ' - Type: ' + c.typeof(`${a}`) )
     })
  );

 Var: var1 - Type: string
 Var: var2 - Type: string
 Var: var3 - Type: number
[ undefined, undefined, undefined ]

打字稿游乐场

于 2021-04-07T01:40:59.747 回答