Storybook: TS1086: средство доступа не может быть объявлено во внешнем контексте

Созданный на 15 янв. 2020  ·  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

Самый полезный комментарий

Попробуйте " skipLibCheck": true , например внутри 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 go

Из

get hasTransport(): boolean;

Чтобы

readonly hasTransport: boolean;

Я была такая же проблема. Я решаю это обновлением пакета Typescript до последней версии

Я была такая же проблема. Я решаю это обновлением пакета Typescript до последней версии

@siropo Какая версия? Я использую angular 8.3.20 и машинопись 3.5.3. И у меня такая же ошибка при попытке создать проект.

@IsharaMadawa "

@IsharaMadawa "

@siropo Можете ли вы

@ 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.

да. Я получил эту ошибку, и мне также пришлось обновить angular

@IsharaMadawa Вы
Я вижу ошибку ниже
The Angular Compiler requires TypeScript >=3.4.0 and <3.5.0 but 3.x.y was found instead.
в angular 8.2.3 также

Это также мешает нам использовать последнюю версию Angular 8.2.x: /

image

У меня есть версия Typescript 3.7.4 и версия Angular 8.3.21, и я получаю то же сообщение! Пожалуйста помоги! :-)

Обновление с ng update --next @angular/cli --force до 9.0.0-rc.12 которое использует typescript @ "3.7.5" , действительно помогло решить проблему.

Возникает та же проблема с typescript 3.7.5 и storybook/react 5.3.9

обновления --next @ angular / cli --force
npm install typescript @ latest

;)

ng update --next @ angular / cli --force
npm install 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

Хотите открыть PR против ветки next ?

Мы выберем его в master и выпустим как патч

Ты понял!

@ndelangen @shilman

Следует ли Storybook 6 использовать TypeScript 3.7, поскольку он все равно будет предлагаться как критическое изменение? Если это так, я думаю, что это действительно нужно изменить в master а не в next . Текущий PR # 9826 против next но я могу перефразировать это, чтобы вместо этого указывать на master , дайте мне знать.

Следовательно, если TS 3.7+ на самом деле не важен, его можно обновить как часть Storybook 7 или позже?

у меня работает @lychyi. Большое спасибо за то, что позаботились об этом и обдумали это !!! 💯

re: 3.7 в сборнике рассказов 6.0. я не уверен, нужна ли версия 3.7, позволю одному из машинописцев поговорить с этим @ndelangen @kroeder @gaetanmaisse

FWIW, next уже использует 3.7, который, к его достоинствам, имеет действительно полезные функции, такие как необязательная цепочка ( foo?.bar ) и оператор объединения с нулевым значением ( foo ?? bar ). Изменение этого только в master для Storybook 5.3.x будет наименее разрушительным для текущего положения вещей.

Кроме того, я только что узнал, что испускание геттера / сеттера - это только критическое изменение для "typescript": "<=3.5" . TS 3.6 ориентировал эту функцию на будущее, поэтому еще один вариант - попросить людей перейти на TS3.6, если они не могут перейти на TS3.7 по какой-либо причине. Критические изменения в TS3.6 не так уж плохи.

Однако использование TS3.7 по-прежнему мешает пользователям Angular, которые еще не могут перейти на 9.x. Angular 8.x заблокирован на ~3.5.3 .

Таким образом, основная Компромисс я предложил весом на это: _ «мы были бы удобно говорить , что Сторибук 6 не совместим с угловыми 8 , так что мы могли бы использовать самые последние и самые большие , что машинопись 3,7 может предложить?» _

@lychyi Отличное резюме. Неосведомленное чутье определенно говорит: 3,7 против 6,0. Лови будущее !! 😈

@lychyi Спасибо за отличную работу! 👏 👏

Будет ли нам комфортно сказать, что Storybook 6 несовместим с Angular 8, чтобы мы могли использовать самое последнее и лучшее, что может предложить TypeScript 3.7?

Для меня немного жестко сделать SB 6 несовместимым с Angular <9, потому что Angular 9 вышел всего на несколько дней. Многие пакеты не готовы к этой новой версии, которая для новичков Angular является реальной основной версией, которая вводит новый конвейер компиляции и рендеринга, и поэтому переход на Angular 9 не может быть выполнен для какого-то большого монорепроекта (например, того, с которым я работаю. на работе).

Поскольку улучшения, вносимые TS 3.7, в настоящее время широко не используются в SB monorepo, мы, возможно, можем сохранить TS 3.6 (так что объедините PR в next + вишневый выбор на master ), пока мы не найдем способ работать. вокруг этого вопроса. Возможно, стоит взглянуть на проект: https://github.com/sandersn/downlevel-dts, он позволяет создавать старые файлы определений на основе новых 🤷‍♂

@gaetanmaisse Вы гораздо больше приму ваше мнение по этому поводу. Однако хочу отметить несколько моментов:
1) Текущая оценка SB6 - конец апреля, и к тому времени NG9 будет несколько месяцев назад.
2) Если это действительно критическое изменение, и мы не будем его менять сейчас, в следующий раз мы сможем изменить его - 7.0, что, вероятно, будет через год.

Конечно, если мы сможем исправить это с помощью 3.6, это даже лучше! Внутри Storybook было бы здорово начать использовать необязательную цепочку и т. Д., Хотя я полагаю, что это относится к зависимости разработчика, а не к зависимости.

@shilman Я полностью согласен с вами 💯 и очень разочарован тем, что мне пришлось оставить 3.6 до SB7.

Поскольку SB6 все еще находится в стадии альфа-тестирования, я думаю, мы должны сказать, что наша цель - иметь TS 3.7+ в SB6 и найти способ по-прежнему быть совместимым с Angular <= 8. А если это невозможно, см. В конце марта. или начало апреля о том, как был принят NG9, и обсуждение отказа от поддержки Angular <= 8.

@gaetanmaisse Я играю с веткой, чтобы использовать downlevel-dts. Сначала я отклонил это, потому что это не поддерживаемая часть TypeScript, но, немного подумав, это может быть жизнеспособным вариантом, позволяющим нам использовать TS3.7 + и при этом быть совместимым с пользователями <= TS3.5. Дайте мне немного времени, чтобы проверить изменения, и тогда мы увидим, стоит ли это обслуживание. Скрипты сборки довольно аккуратны, так что это не должно быть слишком сложно.

@gaetanmaisse PR

Спасибо за возможность внести свой вклад!

Обновление с ng update --next @angular/cli --force до 9.0.0-rc.12 которое использует typescript @ "3.7.5" , действительно помогло решить проблему.

Это тоже решило мою проблему! Большое спасибо!

Хорошо, но как решить эту проблему без обновления машинописного текста?

@ColCh, мы работаем над этим https://github.com/storybookjs/storybook/pull/9847 скоро он должен быть доступен! 👏 👏 @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 исправление

Спасибо, я неправильно понял и подумал, что это было так.
Какое время прибытия для следующего релиза?
Также есть способ использовать старую версию Storybook, чтобы обойти проблему, пока она не будет исправлена?
Angular 9 не прошел проверку в моей компании, поэтому мне нужно немного подождать, прежде чем я смогу обновиться.

@ cnestor1 ETA в ближайшие 5 дней

Я временно разрешил эту ошибку, посетив файл nodemodules (файл .d.ts), упомянутый в ошибке, а затем сохранив его с помощью ctrl + s, это устранит ошибку, поскольку ваш код будет скомпилирован, но ошибка все равно будет

Сын оружия!! Я только что выпустил https://github.com/storybookjs/storybook/releases/tag/v5.3.14, содержащий PR № 9847, который ссылается на эту проблему. Обновите сегодня, чтобы попробовать!

Закрытие этого вопроса. Пожалуйста, откройте снова, если считаете, что еще нужно сделать.

Получение такой же проблемы :)

@rohittagadiya вы обновили до последней версии?

Попробуйте " skipLibCheck": true , например внутри 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"
    ]
  },

Надеюсь, это поможет вам !!

Попробуйте " skipLibCheck": true , например, в 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"
    ]
  },

Надеюсь, это вам поможет !!

Работает !!!! благодаря

Попробуйте " skipLibCheck": true , например внутри 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 в compilerOptions внутри файла tsconfig.json у меня сработало. Огромное спасибо .

Вмешательство - skipLibCheck: true творит шарм. Это отлично подходит для тех, кто не может рискнуть средним циклом QA ng update . Благодаря!

Попробуйте " skipLibCheck": true , например внутри 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"
    ]
  },

Надеюсь, это поможет вам !!

Спасибо. Работает хорошо.

Попробуйте " skipLibCheck": true , например внутри 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 install typescript @ latest

;)

Я использую angular 5, можно ли использовать ngx-file-upload
errr

обновить @ angular-devkit / build-angular

Была ли эта страница полезной?
0 / 5 - 0 рейтинги