Material-ui: 「TS2554:1つの引数が必要ですが、0になりました。」 makeStylesによって返されたフック上

作成日 2018年12月28日  ·  22コメント  ·  ソース: mui-org/material-ui

  • [x]これはv0.xの問題ではありません。
  • [x]このリポジトリの問題を検索し

期待される動作🤔

TypeScriptは、次の場合にエラーを表示しないはずです。

コンポーネントの外側:
const useStyles = makeStyles(styles);

コンポーネントの内部:
const {/* stuff */} = useStyles();

現在の行動😯

useStyles();関数呼び出しには下線が引かれ、WebStormは「TS2554:1つの引数が必要ですが、0を取得しました」と言います。 その上に。

| 技術| バージョン|
| -------------- | --------- |
| @ material-ui / styles | 3.0.0-alpha.4 |
| React | 16.7.0-alpha.2 |
| TypeScript | 3.1.1 |

bug 🐛 styles typescript

最も参考になるコメント

@krazyjakeeはconst c = useStyles({});試してください

全てのコメント22件

styles宣言とtsconfig.json含めてください。 tsc実行するとエラーが表示されますか? IDE統合は異なるタイプスクリプトバージョンを使用する傾向があるため、これを尋ねます。

無関係な落とし穴:解決されたバージョン文字列react@nextが時間の経過とともに変化することを優先します。 あなたはおそらく[email protected]意味しましたか?

私は自分でtsc実行していません。TypeScriptファイルを変更するたびに、IDEを使用して.ts/x.js/x直接(インプレースで)トランスパイルしています。

私が使用しているWebStormにバンドルされているバージョンは3.1.1です。

私が使用しているReactバージョンを反映するようにOPを更新しました: 16.7.0-alpha.2

styles変数は次のとおりです。

const styles = {
    chart: {
        width: '100%',
        height: 70,
        backgroundColor: '#f9f9f9'
    },
}

stylesが関数( theme => { /* definitions */ } )として定義されている場合、同じメッセージが表示されます。

tsconfig.json

{
  "compilerOptions": {
    "sourceMap": false,
    "target": "ES2017",
    "module": "ES6",
    "jsx": "react",
    "moduleResolution": "Node",
    "strictPropertyInitialization": true,
    "strictNullChecks": true,
    "noImplicitAny": true
  }
}

stylesが関数( theme => { /* definitions */ } )として定義されている場合、同じメッセージが表示されます。

次に、セットアップにも問題があります。 コールバックの使用法をテストしましたが、正常に機能しています。 ただし、静的スタイルオブジェクトを使用すると、再現可能なバグが発生します。

この問題は、 [email protected] (コンパイラー構成インクリメンタル:true)と@material-ui/[email protected]組み合わせで戻ってきました。 ただし、 [email protected]

@TeoTNレポートありがとうございます。 私はこれがなぜ起こるのか知っていると思います。

@TeoTN問題の原因となっているコードを含めてください。 再現できません。

@ eps1lonは、バグを再現するリポジトリです: TeoTN / mui-ts-bug

また、 [email protected]@material-ui/[email protected]でこのチケットのエラーに遭遇しました。
[email protected]からアップグレードした理由は、VSCodeがオートコンプリートとツールチップで非常に遅いためです。

[email protected]にダウングレードすると、 makeStyles周りに次のような新しいエラーが発生しました。

      Types of property 'main' are incompatible.
        Type '{ position: string; top: number; left: number; bottom: number; right: number; }' is not assignable to type 'CSSProperties | ((props: {}) => CSSProperties)'.
          Type '{ position: string; top: number; left: number; bottom: number; right: number; }' is not assignable to type 'CSSProperties'.
            Types of property 'position' are incompatible.
              Type 'string' is not assignable to type 'PositionProperty'.  TS2345

     9 | }));
    10 | 
  > 11 | const useStyles = makeStyles((theme: Theme) => ({
       |                              ^
    12 |   main: {
    13 |     position: 'absolute',
    14 |     top: 0,

私はこれをcreateStylesと組み合わせて次のように修正することができました:

const useStyles = makeStyles((theme: Theme) =>
  createStyles({
    main: {
      position: 'absolute',
      top: 0,

おそらく、言及する価値はそれだけでimport { createStyles } from '@material-ui/styles';作品ながら、 createStylesから@material-ui/coreタイピングが異なるためしません。

[email protected][email protected]両方で、 createStylesを使用する必要はありません[email protected]

この問題はtypescriptのリリース候補でのみ発生するため、これを閉じます。 依存関係の不安定なバージョンをサポートすることはできません。 Typescriptの安定バージョンでこのエラーが再発する場合は、新しい問題を報告してください。

今のところ最新の安定バージョンであるtypescript3.5.1では実際のようです(material-ui 4と一緒に)

4.0.2バージョンとts3.5.1では、tsconfig.jsonに "strictNullChecks":falseを追加することで、このエラーをトリガーできます。

4.0.2バージョンとts3.5.1では、tsconfig.jsonに "strictNullChecks":falseを追加することで、このエラーをトリガーできます。

これは私たちのタイピングではサポートされていません:

私たちの定義は、次のtsconfig.jsonでテストされています。 それほど厳密ではないtsconfig.jsonを使用するか、一部のライブラリを省略すると、エラーが発生する可能性があります。

-https://material-ui.com/guides/typescript/

以下の下で公開され、すべてのパッケージtypes/でテストされていません"strictNullChecks": falseだけでなくほとんどのパッケージを意味しないことは、この構成をサポートして。

びっくりしました。 私はプロジェクトを継承しました厳格な:偽と決してそれを前に、より多くのエラーが発生しませんでした。

v3.xが機能したので、4.xも機能すると思いました。

とにかく、そのメモはこの問題を報告している他の人を助けるかもしれません、それは確かにアップグレードするための予想外のコストです。

私が覚えている限り、3.xには他の問題がありました。 あなたはそれらに遭遇しなかったか、すでに不健全なタイプを持っていました。 この要件は4.xでは導入されていません。

きっとあったし、運が良かった。

しかし、私はとコンパイルの罰金というサンプルプロジェクト取る場合strict: true 、私はそれを反転するだけで、この問題をヒットすることを期待しないでくださいstrict: false 。 不健全なタイプがその状況とどのように関係するのかわかりません。

不健全なタイプがその状況とどのように関係するのかわかりません。

strictNullChecks: falseで壊れるユーティリティタイプと関係があります。 そのフラグがないと、 undefined | nullany割り当てることができます。 ただし、これらは実装の詳細です。

この問題は再度開く必要があります。

今のところ、この問題を回避するにはどうすればよいですか? nullを渡すと、makeStylesは「未定義のクラスを見つけることができません」というエラーをスローします。 時々私は渡す小道具を持っていないので、私は何を渡しますか?

@krazyjakeeはconst c = useStyles({});試してください

@krazyjakeeはconst c = useStyles({});試してください

これがうまくいったありがとう!

私はtypescript3.7.5でこのエラーに遭遇します。
このconst c = useStyles({});機能しますが、
しかし、それはドキュメントと矛盾しています:
https://material-ui.com/zh/styles/basics/

FWIW、同じことを見て。 ここ(https://github.com/mui-org/material-ui/issues/16867)に投稿された提案をstrictstrictNullChecksで試しましたが、まだサイコロはありません。 const c = useStyles({});は今「道」ですか?

このページは役に立ちましたか?
0 / 5 - 0 評価