TypeScript API Reflect.getMetadata 返回 undefined 的解决办法

简介: TypeScript API Reflect.getMetadata 返回 undefined 的解决办法

我有下面这段测试代码:

function validate(
  target: Object,
  key: string,
  descriptor: PropertyDescriptor
) {
  const originalFn = descriptor.value;
  // 获取参数的编译期类型
  const designParamTypes = Reflect
    .getMetadata('design:paramtypes', target, key);
  descriptor.value = function (...args: any[]) {
    args.forEach((arg, index) => {
      const paramType = designParamTypes[index];
      const result = arg.constructor === paramType
        || arg instanceof paramType;
      if (!result) {
        throw new Error(
          `Failed for validating parameter: ${arg} of the index: ${index}`
        );
      }
    });
    return originalFn.call(this, ...args);
  }
}
class C {
  @validate
  sayRepeat(word: string, x: number) {
    return Array(x).fill(word).join('');
  }
}
const c = new C();
console.log('Ethan');
c.sayRepeat('hello', 2); // pass
c.sayRepeat('', 'lol' as any); // throw an error

执行时,发现第 17 行的代码,Reflect.getMetadata 返回 undefined:



image.png

经过研究,发现了这个 StackOverflow 帖子:


https://stackoverflow.com/questions/65246467/reflection-metadata-designparamtypes-returning-undefined-on-deno


需要修改 tsconfig.json 的内容:


image.png


添加这两行:


  "experimentalDecorators": true,
    "emitDecoratorMetadata": true,


之后问题解决:


image.pngimage.png

相关文章
|
1月前
react+typescript装饰器写法报错的解决办法
react+typescript装饰器写法报错的解决办法
22 1
|
6月前
|
编译器
TypeScript-去除null和undefined检测
TypeScript-去除null和undefined检测
88 0
|
6月前
|
JavaScript
TypeScript-null和undefined
TypeScript-null和undefined
36 0
|
JavaScript 安全
Typescript any、unknown、 void、undefined 和 never 类型
本文介绍了 Typescript 的 `any` 类型和 `unkonw` 类型,它们都简化了在 TS 中对类型的使用,方便快速开发,相比于 `any`,`unkonw` 类型更加安全。 然后介绍了 Typescript 的几个特殊的类型,`void`,`undefined`,`never`,它们主要应用在几个特定的场景,比较容易区分。
593 0
|
JavaScript API
TypeScript API Reflect.getMetadata 返回 undefined 的解决办法
TypeScript API Reflect.getMetadata 返回 undefined 的解决办法
114 0
TypeScript API Reflect.getMetadata 返回 undefined 的解决办法
|
JavaScript 前端开发
TypeScript void 和 undefined 的区别
TypeScript void 和 undefined 的区别
133 0
TypeScript void 和 undefined 的区别
|
PHP Apache
PHP Notice: Undefined index错误提示的解决办法
 配置好后运行PHP网站,出现了一个错误提示:“PHP Notice: Undefined index ...”
2022 0
$('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法
原文: $('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法 $('#checkbox').
738 0
$('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法
原文: $('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法 $('#checkbox').
732 0