質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

771閲覧

Array継承クラスのflowtypeエラー

nitaking

総合スコア6

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/06/06 04:35

編集2018/06/06 04:52

前提・実現したいこと

javascriptにて

Arrayを継承したクラスを定義したところ、flowでエラーが出ました。
解消方法が不明です。

tryflow: URL

発生している問題・エラーメッセージ

sh

13: module.exports = class SampleArray extends Array { 2 ^ Cannot use `Array` [1] with less than 1 type argument. 3References: 4[LIB] static/v0.73.0/flowlib/core.js:239: declare class Array<T> extends $ReadOnlyArray<T> { 5 ^ [1]```

該当のソースコード

js

1// @flow 2 3module.exports = class SampleArray extends Array { 4 5};

試したこと

flowのエラー自体を解消するには extends Array<Object>とすれば良いですが、
その場合JSの構文エラーとなります。

extends Array<Object> { ^ SyntaxError: Unexpected token <

こちらはnode環境、cli上でmochaのテストで実行してみると、上記の構文エラーがでます。
(node v8.11.1)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2018/06/06 04:45

JSの構文エラーが出たというのは、どのような環境でしょうか。記載をお願いします。JavaScriptは現在多種多様な環境で使われている言語ですので、プラットフォームによって、エラーが出る出ないということが起こり得ます。
nitaking

2018/06/06 04:52

追加しました。nodeです
guest

回答2

0

以下の書き方普通にできませんか?
flowでエラー出ても、
Node環境ならいけそうな気がするんですが・・・。

javascript

1class SampleArray extends Array { 2 3}

参考URL:https://qiita.com/mHadate/items/77f18cc1629ef38c1399

flow上でエラーが出るのは、どうやら、Arrayがクラスとして認識されてないからかと思われます。

javascript

1class Array { 2} 3 4class SampleArray extends Array { 5 6};

こうすると、flow上ではエラーがでないです。
ということから考えると、flow上では、Arrayはクラスとして定義されていないということかと思います。
であるならば、通常のJavaScript環境なら、

javascript

1class SampleArray extends Array { 2 3};

は使えるかと思われます。

投稿2018/06/06 04:58

編集2018/06/06 05:05
miyabi_takatsuk

総合スコア9528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nitaking

2018/06/06 05:00

flowを無視すると、問題なく動くことは確認しました。 今回、flow・JS仕様、どちらもエラーなく記載する方法を探しているのですが、その方法はないということでしょうか?
miyabi_takatsuk

2018/06/06 05:06 編集

flowでエラーが出る原因を追記いたしました。
nitaking

2018/06/06 05:14 編集

ありがとうございます! flow・JS仕様、ともにエラー回避することを確認しました。 ここで更に問題がありまして、定義したSampleArrayに求める挙動として、配列(Array)を継承させたかったのですが、独自定義したArrayですと配列としての挙動は定義されておりません。 (独自定義Arrayに配列(Array)を継承させると、また同じことが起きるので・・・)
miyabi_takatsuk

2018/06/06 05:45 編集

うーん、flow自体にそのような仕様がそもそも実装されていないようなので・・・。 class Array { arr; constructor (arg){ this.arr = new Array(0); } forEach(f){ this.arr.forEach(f); } } とかを、flowだけ追加ってやってって、地道にArrayのメソッドとか追加していくしかないと思いますよ。 どうしても、テスト環境がほしいなら、flow以外の別のテスト環境を見つけるとかなどでしょうかね。
nitaking

2018/06/06 08:42

なるほど・・・ 調べた限り情報がないのでそういう方向性になるんでしょうか。 ありがとうございます。
guest

0

module.exports = class SampleArray<T> extends Array<T> {

↑こうじゃろ。

投稿2018/06/06 04:41

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nitaking

2018/06/06 04:43 編集

その場合も、JS構文エラーとなります…。 ``` module.exports = class SampleArray <T> extends Array<T> { ^ SyntaxError: Unexpected token < ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問