2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Optional Chaining のエラーを更にもう一度整理

Posted at

これまで、
https://qiita.com/terukazu/items/d0ac760425a715649d92
https://qiita.com/terukazu/items/73d32b7907cc76328fb9
と、気になった内容とか調べていて、ようやく、頭の情報が整理されてきたので、再度トライ。

vue-cli-service build でエラーが発生しない

ts-loader が解釈できているんだから、エラーが発生しないのは当然。

vue-cli-service build で生成し、ブラウザで確認してもエラーが発生しない

ブラウザがOptional Chainingをサポートしているならば、エラーする理由がない。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Optional_chaining

storybook を開始するとエラーが発生する

発生時のローダー設定

File was processed with these loaders:
 * ./node_modules/vue-docgen-loader/lib/index.js
 * ./node_modules/vue-docgen-loader/lib/index.js
 * ./node_modules/ts-loader/index.js
 * ./node_modules/vue-loader/lib/index.js

ローダーは逆順に実行される。
https://webpack.js.org/concepts/loaders/#loader-features

エラー回避

tsconfig.json の target を "ES6" にするとエラーは発生しない。

tsconfig.json の "target" を "esnext" や "es2020" を設定していても、"esnext" というパラメータ自体にエラーが発生していない事を考えると、後段の vue-docgen-loader がエラー発生元の可能性が高い。

storybook の公式見解

下記のチケットで発見。
https://github.com/storybookjs/storybook/issues/11515#issuecomment-657681163

ここで気になる記述が。。。。

"I've found the culprit,"

犯人見つけた。

これは良いとして、問題は次の一文

"it looks like the "target": "esnext" doesn't support optional chaining anymore :/"

「"taget" : "esnext"」 は Optional Chaining をサポートしなくたったみたい。

そして。。。

So this is a tsconfig.json configuration issue, not a storybook issue?

それに、 tsconfig.json の設定の話だから、storybook 関係なくね?

として結論付けしている。

マジか?!

まず、これを見て吃驚仰天之助だったので。。。

"it looks like the "target": "esnext" doesn't support optional chaining anymore :/"

「"taget" : "esnext"」 は Optional Chaining をサポートしなくたったみたい。

改めて、公式サイトで調べてみる。

ESNext という特別な値は TypeScript がサポートしている最新のターゲットバージョンを参照します。
https://www.typescriptlang.org/ja/tsconfig

で、現時点の最新版のECMAScriptの「ECMA-262 11th Edition / June 2020」内の「12.3.9 Optional Chains」にてサポートしている記述がある。
https://www.ecma-international.org/wp-content/uploads/ECMA-262.pdf

となると、サポートしなくなったのは ECMAScript ではなく、何なんだろうか?
ちなみに、この発言は、コントリビュータさんじゃなさそう。

そして、次の発言はコントリビュータさんですね。

So this is a tsconfig.json configuration issue, not a storybook issue?

それに、 tsconfig.json の設定の話だから、storybook 関係なくね?

というのが、storybookの公式見解のようですね。

結論

「動けば良い」と考えるなら、tsconfig.json"target": "es2018"にすれば良い。("ES6"でも良いが、対象のプラットフォームによりますな)
「原因を知りたい」と考えるなら storybook のソースコードを見るしかないかない。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?