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
}
}