0

EDIT1:我在这里
创建了一个最小的复制存储库, 代码和复制步骤在存储库中可用。
EDIT2:当我将转译的代码嵌入到 html 文件中时,也会发生同样的错误。

---来自这里的原始问题---

我正在使用 Clasp + Typescript + Webpack + Babel 在本地使用 npm 库开发 GAS。
直到我在我的项目中使用装饰器,它工作正常。但是,使用装饰器(更准确地说,类验证器)会导致 GAS 出现以下错误...

TypeError: (0 , _metadata_MetadataStorage__WEBPACK_IMPORTED_MODULE_1__.getMetadataStorage)(...).addConstraintMetadata is not a function(line 482, file "index")

有谁知道如何避免上述错误?

这是示例代码和配置。

// index.ts

import { IsOptional, IsString } from 'class-validator';

declare const global: {
  [x: string]: any;
};

class Foo {
  @IsOptional()
  @IsString()
  foo: string;
}

// ENTRYPOINT
global.main = function (e: any) {
  console.log('Hello World!');
  const hoge = new Foo();
};

// .babelrc (with babel-loader v8.2.3)
{
  "presets": ["@babel/preset-typescript"],
  "plugins": [
    ["@babel/plugin-proposal-optional-chaining"],
    ["@babel/plugin-proposal-decorators", { "decoratorsBeforeExport": true }],
    ["@babel/plugin-proposal-class-properties", { "loose": true }]
  ]
}
// tsconfig.json (with TypeScript v4.1.3)
{
  "compilerOptions": {
    "lib": ["es5"], // changing this to es6 or esnext doesn't fix the problem
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}
4

0 回答 0