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

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

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

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

CSSフレームワーク

CSSフレームワークは、Webページのスタイルを指定する言語であるCSSを容易に構築するためのツールです。ツイッター社が開発した「Bootstrap」や段組レイアウトが可能な「Foundation」など様々なCSSフレームワークがあります。

Q&A

解決済

1回答

1572閲覧

react styled-componentsのエラー

yuyuyuooo

総合スコア23

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

CSSフレームワーク

CSSフレームワークは、Webページのスタイルを指定する言語であるCSSを容易に構築するためのツールです。ツイッター社が開発した「Bootstrap」や段組レイアウトが可能な「Foundation」など様々なCSSフレームワークがあります。

0グッド

1クリップ

投稿2020/06/23 18:23

react と Typescriptを使っています。
スタイルはstyled-componnetsを使用しています。

ハンバーガーメニューのコンポーネントを作っているのですが下記の①と②のエラーが出てしまいました。
エラー内容をみてもどう修正したらいいのかが分かリませんでした。
わかる人いましたらご教授お願いしたいです。

import React, { useState } from 'react' import styled from 'styled-components'; const StyledBurger = styled.div` width: 2rem; height: 2rem; position: fixed; top: 15px; right: 20px; display: flex; justify-content: space-around; flex-flow: column nowrap; div { width: 2rem; height: 0.25rem; //** ① {open}でエラーになっている** background-color: ${({open}) => open ? '#f1f1f1' : '#333'}; border-radius: 10px; } ` const Burger = () => { const [open ,setOpen] = useState(false) return (    // ② StyledBurgerでエラーになっている <StyledBurger open={open} onClick={() => setOpen(!open)}> <div/> <div/> <div/> </StyledBurger> ) } export default Burger
//①のエラー [ts] プロパティ 'open' は型 'Pick<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "slot" | "style" | "title" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | ... 247 more ... | "onTransitionEndCapture"> & { ...; } & ThemeProps<...>' に存在しません。 [2339] //②のエラー ts] 型 '{ children: Element[]; open: any; onClick: () => any; }' を型 'IntrinsicAttributes & Pick<Pick<Pick<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "slot" | "style" | "title" | "key" | "defaultChecked" | "defaultValue" | ... 248 more ... | "onTransitionEndCapture"> & { ...; }, "slot" | ... 254 more ... | "onTransitionEndCapture"> & Partial<...>, "slot" | ... ...' に割り当てることはできません。 プロパティ 'open' は型 'IntrinsicAttributes & Pick<Pick<Pick<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "slot" | "style" | "title" | "key" | "defaultChecked" | "defaultValue" | ... 248 more ... | "onTransitionEndCapture"> & { ...; }, "slot" | ... 254 more ... | "onTransitionEndCapture"> & Partial<...>, "slot" | ... ...' に存在しません。 [2322]

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは
以下のように修正してみるといかがでしょうか?

(1) const StyledBurger = styled.div の上あたりに以下のような型 TProps を追加

diff

1+ type TProps = { 2+ open: boolean; 3+ }; 4 5 const StyledBurger = styled.div`

(2) props open を使用するところで、上記の TProps による型指定を追加

diff

1- background-color: ${({open}) => open ? '#f1f1f1' : '#333'}; 2+ background-color: ${({open}: TProps) => open ? '#f1f1f1' : '#333'};

上記の追加により、問題がすべて解消されるかは分かりませんが、おそらく何らかの進展はあると思います。

なお、 TProps の先頭の T は、私が個人的な慣例として、型名のプレフィクスに使っているものですので、TPropsという型名は、適宜ご変更ください。

以上、参考になれば幸いです。

追記

htsignさんからのコメントにあるとおり、以下のようにも書けます。

diff

1- const StyledBurger = styled.div` 2+ const StyledBurger = styled.div<TProps>`

propsを使う箇所が、 div { background-color: ・・・ の他にもあるのでしたら、TProps の追加が一箇所だけで済む上記のほうが良いかもしれません。

投稿2020/06/23 18:58

編集2020/06/24 01:51
jun68ykt

総合スコア9058

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

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

htsign

2020/06/23 23:21

styled.div<TProps>` ... ` でもいいですね。
jun68ykt

2020/06/24 01:48

@htsignさん コメントありがとうございます。div と ` の間に generics で props の型を入れるその書き方、初めて知りました m(_ _)m そちらのほうが良さそうなので、回答にも追記しました。
yuyuyuooo

2020/06/25 06:31

ありがとうございます 解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問