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 |
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 | null
をany
割り当てることができます。 ただし、これらは実装の詳細です。
この問題は再度開く必要があります。
今のところ、この問題を回避するにはどうすればよいですか? 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)に投稿された提案をstrict
とstrictNullChecks
で試しましたが、まだサイコロはありません。 const c = useStyles({});
は今「道」ですか?
最も参考になるコメント
@krazyjakeeは
const c = useStyles({});
試してください