Storybook: TS1086: Um acessador não pode ser declarado em um contexto ambiente

Criado em 15 jan. 2020  ·  55Comentários  ·  Fonte: storybookjs/storybook

Descreva o bug
Fizemos upgrade para 5.3.3 agora mesmo e nossa construção Angular está falhando com o seguinte:

[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]            ~~~~~~~~~~~~

Olhando rapidamente no Google, parece que outros repositórios estão enfrentando o mesmo problema devido ao uso do TypeScript 3.7.0 - mas o Angular é restrito a <3.5.0

Erros semelhantes
https://github.com/nestjs/nest/issues/3513
https://github.com/googleapis/node-gtoken/issues/244

Acredito que a alteração mais recente vem diretamente do TypeScript https://github.com/microsoft/TypeScript/issues/33939 - mas até que uma correção seja lançada, o arquivo index.d.ts precisará ser regenerado com npm i typescript@~3.6.0 (troque ^ por ~ )

Sistema:

    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

Comentários muito úteis

Tente " skipLibCheck": verdadeiro , dentro de tsconfig.json, por exemplo.

"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"
    ]
  },

Espero que ajude você !!

Todos 55 comentários

Eu tentei fazer a atualização, mas me perdi na estrutura do pacote 😅 - O resultado final (depois que os arquivos dist são gerados) deve fazer @storybook/channels/dist/index.d.ts:25 go

De

get hasTransport(): boolean;

Para

readonly hasTransport: boolean;

Eu tive o mesmo problema. Eu resolvo isso atualizando o pacote Typescript para a versão mais recente

Eu tive o mesmo problema. Eu resolvo isso atualizando o pacote Typescript para a versão mais recente

@siropo Qual versão? estou usando angular 8.3.20 e datilografado 3.5.3. E eu recebi o mesmo erro ao tentar construir o projeto.

@IsharaMadawa "typescript": "3.7.4"

@IsharaMadawa "typescript": "3.7.4"

@siropo Você pode soltar o package.json aqui?

@IsharaMadawa por quê? Tente atualizar sua versão datilografada e verifique se está funcionando

Se você estiver executando uma versão anterior do Angular, por exemplo, 8.1.0, você verá o seguinte erro

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

Se você estiver executando uma versão anterior do Angular, por exemplo, 8.1.0, você verá o seguinte erro

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

sim. eu recebi este erro e tive que atualizar o angular também

@IsharaMadawa Você atualizou para a versão angular 9 rc?
Eu vejo o erro abaixo
The Angular Compiler requires TypeScript >=3.4.0 and <3.5.0 but 3.x.y was found instead.
no angular 8.2.3 também

Isso também quebra para nós usando a versão mais recente do Angular 8.2.x: /

image

Tenho a versão 3.7.4 do Typescript e a versão 8.3.21 do Angular e estou recebendo a mesma mensagem! Por favor ajude! :-)

Atualizar com ng update --next @angular/cli --force para 9.0.0-rc.12 que usa typescript @ "3.7.5" realmente ajudou a resolver o problema.

Obtendo o mesmo problema com typescript 3.7.5 e storybook/react 5.3.9

de atualização --next @ angular / cli --force
npm install typescript @ mais recente

;)

ng update --next @ angular / cli --force
npm install typescript @ mais recente

;)
Funcionou, obrigado Snargol.

Confirmado, atualizando para Angular 9 (e por extensão Typescript 3.7.5), este problema foi resolvido

Atualizar para TypeScript 3.7.x não é uma ótima opção para mantenedores de bibliotecas. Isso significa que a mudança de 3.6 para 3.7 (tecnicamente uma mudança importante) é passada para nossos consumidores e não podemos assumir que eles podem atualizar o TypeScript prontamente.

@ndelangen Acho que isso pode ser retificado alterando https://github.com/storybookjs/storybook/blob/next/package.json#L218 para typescript@~3.6.0 , já que typescript@^3.4.0 resolve para 3.7.5 agora. Então, podemos salvar a atualização do 3.7 até o Storybook 6.0, uma vez que, na verdade, é uma alteração importante.

O que você acha?

Parece um plano @lychyi

Quer abrir um PR contra a filial next ?

Vamos selecioná-lo em master e lançar como um patch @shilman

Você entendeu!

@ndelangen @shilman

O Storybook 6 deve utilizar o TypeScript 3.7, uma vez que ele será oferecido como uma alteração inovadora de qualquer maneira? Nesse caso, acho que isso deveria ser alterado em master e não em next . O PR # 9826 atual é contra next mas posso repetir isso para apontar para master vez disso, me avise.

Consequentemente, se TS 3.7+ não for realmente importante, ele poderia ser atualizado como parte do Storybook 7 ou além também?

funciona para mim @lychyi. muito obrigado por cuidar disso e pensar nisso !!! 💯

re: 3.7 no livro de histórias 6.0. não tenho certeza se o 3.7 é necessário, vou deixar um dos caras datilografados falar com aquele @ndelangen @kroeder @gaetanmaisse

FWIW, next já utiliza 3.7, que para seu mérito, tem recursos realmente interessantes como encadeamento opcional ( foo?.bar ) e o operador de coalescência nulo ( foo ?? bar ). Alterar isso apenas em master para o Storybook 5.3.x seria o menos perturbador para o estado atual das coisas.

Além disso, acabei de saber que o getter / setter emit é apenas uma alteração significativa para "typescript": "<=3.5" . O TS 3.6 preparou esse recurso para o mudanças no TS3.6 não é tão ruim.

No entanto, usar o TS3.7 ainda prejudica o pessoal do Angular que ainda não é capaz de atualizar para o 9.x. Angular 8.x está bloqueado em ~3.5.3 .

Portanto, a principal compensação que sugeri ponderar é: _ "Seria confortável dizer que o Storybook 6 não é compatível com o Angular 8 para que pudéssemos aproveitar o que há de mais recente e melhor que o TypeScript 3.7 tem a oferecer?" _

@lychyi Ótimo resumo. A intuição desinformada diz definitivamente 3,7 para 6,0. Aproveite o futuro !! 😈

@lychyi Obrigado pelo excelente trabalho! 👏 👏

Estaríamos confortáveis ​​em dizer que o Storybook 6 não é compatível com o Angular 8 para que pudéssemos aproveitar o que há de melhor e mais recente que o TypeScript 3.7 tem a oferecer?

Para mim, é um pouco difícil tornar o SB 6 não compatível com Angular <9 porque o Angular 9 será lançado por apenas alguns dias. Muitos pacotes não estão prontos para esta nova versão, que para o novato do Angular é uma versão real principal que apresenta um novo pipeline de compilação e renderização, e portanto a migração para o Angular 9 não pode ser feita para algum grande projeto monorepo (como o que estou trabalhando no trabalho).

Como os aprimoramentos trazidos pelo TS 3.7 não são amplamente usados ​​no SB monorepo, talvez possamos manter o TS 3.6 (então mesclar o PR em next + escolha certa em master ) até encontrarmos uma maneira de trabalhar em torno deste problema. Talvez um projeto para dar uma olhada em: https://github.com/sandersn/downlevel-dts permite gerar arquivos de definição antigos a partir de novos 🤷‍♂

@gaetanmaisse Você está muito mais em contato com o mundo TS / Angular, então, no final das contas, irei com seu julgamento sobre isso. No entanto, quero destacar algumas coisas:
1) A estimativa atual do SB6 é final de abril e, nessa altura, o NG9 terá alguns meses
2) Se esta for realmente uma alteração significativa e não a alterarmos agora, a próxima vez que poderemos alterá-la é 7.0, o que provavelmente levará um ano.

Claro, se conseguirmos consertá-lo com 3.6, então é ainda melhor! Dentro do Storybook seria ótimo começar a usar encadeamento opcional etc., embora eu suponha que isso seja relevante para a dependência de desenvolvimento e não para a dependência.

@shilman : concordo totalmente com você 💯 e estou bastante desapontado por ter que manter 3.6 até o SB7.

Como SB6 ainda está em alfa por semanas, acho que devemos dizer que nosso objetivo é ter TS 3.7+ no SB6 e encontrar uma forma de ainda ser compatível com Angular <= 8. E se não for possível, veja no final de março ou o início do Apris como o NG9 foi adotado e discutir sobre a retirada do suporte Angular <= 8.

@gaetanmaisse Estou brincando com um branch para utilizar downlevel-dts. A princípio, descartei porque não é uma parte mantida do TypeScript, mas depois de pensar um pouco, pode ser uma opção viável nos deixar usar o TS3.7 + e ainda ser compatível com usuários <= TS3.5. Dê-me um pouco para verificar as mudanças e então veremos se vale a pena a manutenção. Os scripts de construção são bem organizados, então isso não deve ser muito difícil.

@gaetanmaisse PR está

Obrigado pela oportunidade de contribuir!

Atualizar com ng update --next @angular/cli --force para 9.0.0-rc.12 que usa typescript @ "3.7.5" realmente ajudou a resolver o problema.

Isso também resolveu meu problema! Muito obrigado!

Ok, mas como resolver esse problema sem a atualização do texto digitado?

@ColCh estamos trabalhando nisso https://github.com/storybookjs/storybook/pull/9847 deve estar disponível em breve! 👏 👏 @lychyi

Obrigado! Esse PR parece resolver o problema.

Ok, pacientemente esperando por isso :) sem pressa

Uau, isso foi rápido!

Mas, @gaetanmaisse , podemos esperar que este commit seja portado para a versão v5? Isso seria legal

@ColCh Vai! Estamos testando se está tudo OK na última versão 6.0.0-alpha e então vamos lançar na versão 5.3.x 😉

Oh ok. Obrigada 🙂

Tenho a seguinte configuração e ainda estou recebendo o erro:

`"

 @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 a correção do

Thx, eu entendi mal e pensei que tinha sido.
Qual é o seu ETA para o próximo lançamento?
Também existe uma maneira de usar uma versão mais antiga do Storybook para contornar o problema até que seja corrigido?
O Angular 9 não foi avaliado em minha empresa, então tenho que esperar um pouco antes de fazer o upgrade.

@ cnestor1 ETA nos próximos 5 dias

Resolvi esse erro temporariamente visitando o arquivo nodemodules (arquivo .d.ts) mencionado no erro e, em seguida, salvando-o com ctrl + s, isso resolverá o erro, pois seu código será compilado, mas o erro ainda estará lá

Filho da mãe!! Acabei de lançar https://github.com/storybookjs/storybook/releases/tag/v5.3.14 contendo PR # 9847 que faz referência a esse problema. Atualize hoje para experimentar!

Fechando esta questão. Abra novamente se achar que ainda há mais a fazer.

Obtendo o mesmo problema :)

@rohittagadiya você atualizou para o mais recente?

Tente " skipLibCheck": verdadeiro , dentro de tsconfig.json, por exemplo.

"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"
    ]
  },

Espero que ajude você !!

Tente " skipLibCheck": true , dentro do tsconfig.json, por exemplo.

"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"
    ]
  },

Espero que ajude você !!

Works!!!! Thanks

Tente " skipLibCheck": verdadeiro , dentro de tsconfig.json, por exemplo.

"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"
    ]
  },

Espero que ajude você !!

Funciona muito bem, obrigado <3

Adicionar "skipLibCheck": true no compilerOptions dentro do arquivo tsconfig.json funcionou para mim. Muito obrigado .

Chiming - skipLibCheck: true funciona muito bem. Isso é ótimo para aqueles que não podem arriscar um ciclo de ng update meio do controle de qualidade. Obrigado!

Tente " skipLibCheck": verdadeiro , dentro de tsconfig.json, por exemplo.

"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"
    ]
  },

Espero que ajude você !!

Obrigado. Trabalhando bem.

Tente " skipLibCheck": verdadeiro , dentro de tsconfig.json, por exemplo.

"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"
    ]
  },

Espero que ajude você !!

Obrigada <3

alterar a versão para:
"ngx-swiper-wrapper": "~ 8.0.1"

Pode resolver este problema

de atualização --next @ angular / cli --force
npm install typescript @ mais recente

;)

Estou usando o angular 5, é possível usar o ngx-file-upload
errr

update @ angular-devkit / build-angular

Esta página foi útil?
0 / 5 - 0 avaliações