算術演算の左側は、「any」、「number」、または列挙型である必要があります。質問する

算術演算の左側は、「any」、「number」、または列挙型である必要があります。質問する
1    interface Dimensions {
2        width: Number,
3        height: Number
4    }
5
6    function findArea(dimensions: Dimensions): Number {    
7        return dimensions.height * dimensions.width;
8    }

7行目、赤い波線の下dimensions.heightdimensions.width

算術演算の左側は、「any」、「number」、または列挙型である必要があります。

赤い波線を消そうとしているのですが、TypeScript コンパイラがエラーを出す理由がわかりません。私が知る限り、幅と高さは Number 型です。

ベストアンサー1

このエラーが発生した別の例がここにあります。役に立つかもしれません。

TypeScript を使用して日付の差を計算しようとしている場合 (私の場合は、データベースから ISO 文字列を使用しようとしていました):

new Date("2020-03-15T00:47:38.813Z") - new Date("2020-03-15T00:47:24.676Z")

TypeScript プレイグラウンド

エラーが表示されます。ここに画像の説明を入力してください

しかし、ブラウザコンソールや他のノード環境に同じコードを配置すると、

new Date("2020-03-15T00:47:38.813Z") - new Date("2020-03-15T00:47:24.676Z")
14137

間違っているかもしれませんが、これは演算子が各オペランドを-暗黙的に使用しているために機能すると思います。 on Date は a を返すため、操作は機能します。valueOfvalueOfnumber

ただし、Typescript はそれを好みません。おそらく、この制約を強制するコンパイラ オプションがあるのでしょうが、私はそれを知りません。

new Date().valueOf()
1584233296463

オペランドを明示的に数値 (bigint) 型にすることで修正できます-

修正例

new Date("2020-03-15T00:47:38.813Z").valueOf() - new Date("2020-03-15T00:47:24.676Z").valueOf()

TypeScript プレイグラウンド

おすすめ記事