Storybook: TS1086:无法在环境上下文中声明访问器

创建于 2020-01-15  ·  55评论  ·  资料来源: storybookjs/storybook

描述错误
刚刚升级到5.3.3,我们的Angular构建由于以下原因而失败:

[ng]
[ng] ERROR in ../../node_modules/@storybook/channels/dist/index.d.ts:25:9 - error TS1086: An accessor cannot be declared in an ambient context.
[ng]
[ng] 25     get hasTransport(): boolean;
[ng]            ~~~~~~~~~~~~

从一个快速的Google看来,由于使用TypeScript 3.7.0,其他存储库似乎也遇到了相同的问题-但Angular限制为<3.5.0

类似错误
https://github.com/nestjs/nest/issues/3513
https://github.com/googleapis/node-gtoken/issues/244

我相信突破性的变化直接来自TypeScript https://github.com/microsoft/TypeScript/issues/33939-但在发布修复程序之前, index.d.ts文件将需要使用npm i typescript@~3.6.0重新生成(将^交换为~

系统:

    OS: macOS Mojave 10.14.6
    CPU: (16) x64 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
  Binaries:
    Node: 12.14.1 - /usr/local/bin/node
    npm: 6.13.4 - /usr/local/bin/npm
  Browsers:
    Chrome: 79.0.3945.117
    Safari: 13.0.4
  npmPackages:
    @storybook/addon-actions: ^5.3.3 => 5.3.3
    @storybook/addon-knobs: ^5.3.3 => 5.3.3
    @storybook/addon-links: ^5.3.3 => 5.3.3
    @storybook/addon-notes: ^5.3.3 => 5.3.3
    @storybook/addon-storyshots: ^5.3.3 => 5.3.3
    @storybook/addons: ^5.3.3 => 5.3.3
    @storybook/angular: ^5.3.3 => 5.3.3
    @storybook/cli: ^5.3.3 => 5.3.3
angular bug has workaround typescript

最有用的评论

尝试tsconfig.json中的

"compilerOptions": {
    "baseUrl": "src",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    **"skipLibCheck": true,**
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },

希望对您有帮助!

所有55条评论

我在执行升级时遇到了麻烦,但迷失在软件包结构中😅-最终结果(生成dist文件后)应该使@storybook/channels/dist/index.d.ts:25生效

get hasTransport(): boolean;

readonly hasTransport: boolean;

我遇到过同样的问题。 我通过将Typescript包更新到最新版本来解决此问题

我遇到过同样的问题。 我通过将Typescript包更新到最新版本来解决此问题

@siropo什么版本? 我正在使用角度8.3.20和打字稿3.5.3。 当我尝试构建项目时,我遇到了同样的错误。

@IsharaMadawa “打字稿”:“ 3.7.4”

@IsharaMadawa “打字稿”:“ 3.7.4”

@siropo您可以将package.json

@IsharaMadawa为什么? 只需尝试更新您的打字稿版本并检查其是否有效

如果您运行的是Angular的旧版本(例如8.1.0),则会看到以下错误

The Angular Compiler requires TypeScript >=3.4.0 and <3.5.0 but 3.x.y was found instead.

如果您运行的是Angular的旧版本(例如8.1.0),则会看到以下错误

The Angular Compiler requires TypeScript >=3.4.0 and <3.5.0 but 3.x.y was found instead.

是。 我遇到了这个错误,还不得不更新角度

@IsharaMadawa您是否已升级到angular 9 rc版本?
我看到以下错误
The Angular Compiler requires TypeScript >=3.4.0 and <3.5.0 but 3.x.y was found instead.
在角度8.2.3中也是如此

这对于使用最新版本的Angular 8.2.x的用户来说也很麻烦:/

image

我有3.7.4版本的Typescript和8.3.21版本的Angular,并且收到相同的消息! 请帮忙! :-)

与更新ng update --next @angular/cli --force9.0.0-rc.12它使用typescript @ "3.7.5"确实帮助了问题。

使用typescript 3.7.5storybook/react 5.3.9获得相同的问题

更新--next @ angular / cli --force
npm安装打字稿@最新

;)

ng update --next @ angular / cli --force
npm安装typescript @ latest

;)
奏效了,谢谢斯纳戈尔。

确认,升级到Angular 9(并通过扩展Typescript 3.7.5),此问题已解决

对于库维护者来说,升级到TypeScript 3.7.x并不是一个很好的选择。 这意味着从3.6到3.7的更改(从技术上来说是一个重大更改)已经传递给我们的使用者,我们不能认为他们也可以轻松升级TypeScript。

@ndelangen我认为可以通过将https://github.com/storybookjs/storybook/blob/next/package.json#L218更改为typescript@~3.6.0来纠正,因为typescript@^3.4.0解析为3.7.5现在。 然后,我们可以保存3.7升级,直到Storybook 6.0为止,因为这实际上是一项重大更改。

你怎么看?

听起来像一个计划@lychyi

想要针对next分支打开PR?

我们将其挑选到master并作为补丁发布@shilman

你说对了!

@ndelangen @shilman

故事书6是否应该使用TypeScript 3.7,因为无论如何它将作为一项重大更改提供? 如果是这样,我认为应该实际更改master而不是next 。 当前的PR#9826与next但是我可以将其改写为指向master ,让我知道。

因此,如果TS 3.7+并不是很重要,是否可以将它升级为Storybook 7的一部分?

为我工作@lychyi。 非常感谢您的照顾并仔细考虑!!! 💯

回复:故事书6.0中的3.7。 我不确定3.7是否是必要的,让其中一个打字稿专家@ndelangen @kroeder @gaetanmaisse

FWIW next已经使用3.7,它的优点是,它具有非常简洁的功能,例如可选链接( foo?.bar )和无效的合并运算符( foo ?? bar )。 仅在Storybook 5.3.x的master更改此设置对当前情况的破坏最小。

另外,我刚刚了解到getter / setter发出只是"typescript": "<=3.5"的重大更改。 TS 3.6已过时,此功能因此可用,因此另一种选择是让人们由于某种原因而无法升级到TS3.7。 TS3.6中的重大更改几乎没有那么糟糕。

但是,使用TS3.7仍然会伤害尚未升级到9.x的Angular人士。 Angular 8.x锁定~3.5.3

因此,我建议权衡的主要权衡是:_“我们是否愿意说Storybook 6与Angular 8兼容,以便我们可以利用TypeScript 3.7所提供的最新和最大功能?”

@lychyi很棒的总结。 不知情的肠子感觉肯定是3.7为6.0。 把握未来! 😈

@lychyi感谢您的出色工作! 👏

我们是否愿意说Storybook 6与Angular 8不兼容,以便我们可以利用TypeScript 3.7必须提供的最新和最大功能?

对我来说,使SB 6与Angular <9不兼容有点苛刻,因为Angular 9仅仅发布了几天。 许多软件包尚未准备好用于该新版本,对于Angular新手来说,这是一个真正的主要版本,引入了新的编译和渲染管道,因此对于某些大型monorepo项目(例如我正在使用的项目),无法迁移到Angular 9。工作中)。

由于SB monorepo目前尚未广泛使用TS 3.7带来的增强功能,因此我们可以保留TS 3.6(因此将PR合并到next +在master上选择樱桃),直到找到一种工作方法围绕这个问题。 也许是一个项目,请看一下: https :

@gaetanmaisse您与TS / Angular世界有更多联系,因此最终我将根据您的判断进行
1)目前对SB6的估算是在4月底,到那时NG9就要几个月了
2)如果确实是一项重大更改,并且我们现在不进行更改,那么下次可以更改的是7.0,这可能是一年的时间了。

当然,如果我们可以用3.6修复它,那就更好了! 在Storybook内部,开始使用可选的链接等会很棒,我认为这与dev依赖关系有关,而不是依赖关系。

@shilman我完全同意你的看法,我很失望,必须保持3.6直到SB7。

由于SB6仍处于Alpha状态达数周之久,我认为我们应该说的目标是在SB6中拥有TS 3.7+,并找到仍与Angular <= 8兼容的方法。如果不可能,请参阅三月底还是Apris的开头,如何采用NG9,并讨论有关放弃对Angular <= 8的支持的问题。

@gaetanmaisse我正在和一个分支一起玩以利用downlevel-dts。 最初,我不考虑它,因为它不是TypeScript的维护部分,但经过一番考虑之后,让我们使用TS3.7 +并仍然兼容<= TS3.5用户可能是一个可行的选择。 给我一点验证更改,然后我们看看是否值得维护。 构建脚本非常整洁,因此这应该不太困难。

@gaetanmaisse公关已经启动,如果您有任何疑问,请告诉我。

感谢您提供的机会!

与更新ng update --next @angular/cli --force9.0.0-rc.12它使用typescript @ "3.7.5"确实帮助了问题。

这也解决了我的问题! 非常感谢!

好的,但是如何在不更新打字稿的情况下解决此问题?

@ColCh我们正在努力https://github.com/storybookjs/storybook/pull/9847它应该会很快上市! ly @lychyi

谢谢! 该公关似乎解决了这个问题。

好吧,耐心等待它:)不用着急

哇,太快了!

但是, @gaetanmaisse ,我们反向移植到v5版本? 那样就好了

@ColCh会的! 我们正在测试最新的6.0.0-alpha上一切正常,然后将其发布为5.3.x版本。

哦好的。 谢谢🙂

我有以下配置,但仍然出现错误:

“”

 @angular/cli": "7.3.8",
"@angular/compiler-cli": "7.2.8",
"@angular/language-service": "7.2.3",
"@babel/core": "^7.7.7",
"@babel/preset-env": "^7.8.4",
"@babel/preset-typescript": "^7.8.3",
"@ngx-translate/core": "11.0.0",
"@storybook/addon-actions": "5.3.13",
"@storybook/addon-links": "5.3.13",
"@storybook/addon-notes": "5.3.13",
"@storybook/addon-storyshots": "^5.3.13",
"@storybook/addon-viewport": "^5.3.13",
"@storybook/addons": "^5.3.13",
"@storybook/angular": "5.3.13",
 "typescript": "^3.2.4"`

ng build --prod
ERROR in node_modules/@storybook/channels/dist/index.d.ts(25,9): error TS1086: An accessor cannot be declared in an ambient context.

@ cnestor1该错误修复程序尚未在5.3.x中发布,应该在下一个版本中发布😉

谢谢,我误会了,以为是。
下一个版本的ETA是多少?
还有没有办法使用较旧版本的Storybook在问题解决之前解决该问题?
尚未对Angular 9进行审核,因此我必须稍等片刻才能进行升级。

未来5天内@ cnestor1 ETA

我通过访问错误中提到的nodemodules文件(.d.ts文件)暂时解决了该错误,然后通过ctrl + s将其保存,这将解决错误,因为您的代码将被编译,但错误仍然存​​在

枪的儿子! 我刚刚发布了https://github.com/storybookjs/storybook/releases/tag/v5.3.14,其中包含引用此问题的PR#9847。 立即升级以试用!

解决此问题。 如果您认为还有更多事情要做,请重新打开。

遇到同样的问题:)

@rohittagadiya您更新到最新吗?

尝试tsconfig.json中的

"compilerOptions": {
    "baseUrl": "src",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    **"skipLibCheck": true,**
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },

希望对您有帮助!

例如,在tsconfig.json中尝试“ skipLibCheck”:true

"compilerOptions": {
    "baseUrl": "src",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    **"skipLibCheck": true,**
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },

希望对您有帮助!

有效!!!! 谢谢

尝试tsconfig.json中的

"compilerOptions": {
    "baseUrl": "src",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    **"skipLibCheck": true,**
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },

希望对您有帮助!

效果很好,谢谢<3

添加“ skipLibCheck”:true,在文件tsconfig.json中的compileOptions中对我有用。 非常感谢 。

Chiming in- skipLibCheck: true具有魅力。 这对于无法在ng update QA中期冒险

尝试tsconfig.json中的

"compilerOptions": {
    "baseUrl": "src",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    **"skipLibCheck": true,**
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },

希望对您有帮助!

谢谢。 运作良好。

尝试tsconfig.json中的

"compilerOptions": {
    "baseUrl": "src",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    **"skipLibCheck": true,**
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },

希望对您有帮助!

谢谢<3

将版本更改为:
“ ngx-swiper-wrapper”:“〜8.0.1”

可以解决这个问题

更新--next @ angular / cli --force
npm安装打字稿@最新

;)

我正在使用Angular 5可以使用ngx-file-upload
errr

更新@ angular-devkit / build-angular

此页面是否有帮助?
0 / 5 - 0 等级