Material-ui: "TS2554: من المتوقع وسيطة واحدة ، ولكن تم الحصول على 0." عاد على الخطاف بواسطة MakeStyles

تم إنشاؤها على ٢٨ ديسمبر ٢٠١٨  ·  22تعليقات  ·  مصدر: mui-org/material-ui

  • [x] هذه ليست مشكلة v0.x.
  • [x] لقد بحثت في قضايا هذا المستودع وأعتقد أن هذه ليست نسخة مكررة.

السلوك المتوقع 🤔

يجب ألا يُظهر TypeScript خطأً عند القيام بما يلي:

خارج المكون:
const useStyles = makeStyles(styles);

داخل المكون:
const {/* stuff */} = useStyles();

السلوك الحالي 😯

تم وضع خط تحت استدعاء الدالة useStyles(); ، ويقول WebStorm "TS2554: متوقعة وسيطة واحدة ، لكنها حصلت على 0." عليه.

| التقنية | الإصدار |
| -------------- | --------- |
| @ material-ui / styles | 3.0.0 ألفا.4 |
| رد فعل | 16.7.0 ألفا.2 |
| تيبسكريبت | 3.1.1 |

bug 🐛 styles typescript

التعليق الأكثر فائدة

krazyjakee حاول const c = useStyles({});

ال 22 كومينتر

الرجاء تضمين تصريح styles و tsconfig.json . هل يظهر الخطأ عند تشغيل tsc ؟ طرح هذا لأن عمليات تكامل IDE تميل إلى استخدام إصدار مختلف للطباعة.

nitpick غير مرتبط: تفضل سلاسل الإصدارات التي تم حلها بتغييرات react@next بمرور الوقت. ربما كنت تقصد [email protected] ؟

أنا لا أقوم بتشغيل tsc بنفسي ، فأنا أستخدم IDE لتحويل .ts/x إلى .js/x مباشرةً (في المكان) عندما أقوم بتغيير ملف TypeScript.

الإصدار المرفق مع WebStorm الذي أستخدمه هو 3.1.1 .

تم تحديث OP ليعكس إصدار React الذي أستخدمه: 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] (تكوين مترجم تزايدي: صحيح) و @material-ui/[email protected] . ومع ذلك ، فإنه يعمل مع [email protected]

TeoTN شكرا على التقرير. أعتقد أنني أعرف لماذا يحدث هذا.

TeoTN هل يمكنك تضمين الرمز الذي يسبب مشكلة. لا يمكنني إعادة إنتاجه.

@ eps1lon ها هو الريبو الذي يعيد إنتاج الخطأ: TeoTN / mui-ts-bug

صادفت أيضًا خطأ هذه التذكرة بـ [email protected] و @material-ui/[email protected] .
كان سبب الترقية من [email protected] هو أن VS Code كان بطيئًا بشكل لا يصدق مع الإكمال التلقائي وتلميحات الأدوات.

عند الرجوع إلى [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 لا يعمل لأن الكتابة مختلفة.

لم يكن استخدام createStyles ضروريًا مع كل من [email protected] و [email protected] .

نظرًا لأن هذه المشكلات تحدث فقط في إصدار مرشح للطباعة المطبوعة ، فسوف أغلق هذا. لا يمكننا دعم الإصدارات غير المستقرة من تبعياتنا. يرجى تقديم مشكلة جديدة إذا ظهر هذا الخطأ مرة أخرى في إصدار ثابت من Typescript.

يبدو أنه حقيقي للنص المطبوع 3.5.1 ، وهو أحدث إصدار ثابت في الوقت الحالي (جنبًا إلى جنب مع material-ui 4)

باستخدام الإصدار 4.0.2 و ts 3.5.1 ، يمكنني تشغيل هذا الخطأ عن طريق إضافة "strictNullChecks": false إلى ملف tsconfig.json الخاص بي.

باستخدام الإصدار 4.0.2 و ts 3.5.1 ، يمكنني تشغيل هذا الخطأ عن طريق إضافة "strictNullChecks": false إلى ملف tsconfig.json الخاص بي.

هذا لا تدعمه كتاباتنا:

يتم اختبار تعريفاتنا باستخدام ملف tsconfig.json التالي. قد يؤدي استخدام tsconfig.json أقل صرامة أو حذف بعض المكتبات إلى حدوث أخطاء.

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

لم يتم اختبار كل حزمة منشورة تحت types/ باستخدام "strictNullChecks": false أيضًا مما يعني عدم وجود حزمة تدعم هذا التكوين تقريبًا.

أنا متفاجئ. لقد ورثت مشاريع مع صارمة: خطأ ولم يسبق لها أن تولد المزيد من الأخطاء من قبل.

منذ أن نجح الإصدار 3.x ، افترضت أن 4.x سيفعل ذلك أيضًا.

على أي حال ، قد تساعد هذه الملاحظة الآخرين الذين يبلغون عن هذه المشكلة ، فهي بالتأكيد تكلفة غير متوقعة للترقية.

كانت هناك مشكلات أخرى في 3.x بقدر ما أتذكر. إما أنك لم تصادفهم أو كان لديك بالفعل أنواع غير سليمة. لم يتم تقديم هذا المطلب مع 4.x.

أنا متأكد من أنه كان هناك ، وقد حالفني الحظ.

ولكن ، إذا أخذت نموذجًا لمشروع يجمع بشكل جيد مع strict: true ، لا أتوقع مواجهة هذه المشكلة ببساطة عن طريق قلبها إلى strict: false . لا أرى كيف سيكون للأنواع غير السليمة أي علاقة بهذا الموقف.

لا أرى كيف سيكون للأنواع غير السليمة أي علاقة بهذا الموقف.

له علاقة بأنواع الأدوات المساعدة التي تنفصل عن strictNullChecks: false . بدون هذا العلم يمكن تعيين undefined | null إلى any . هذه تفاصيل التنفيذ بالرغم من ذلك.

هذه المسألة تحتاج إلى إعادة فتح!

كيف يمكنني التغلب على هذه المشكلة في الوقت الحالي؟ إذا مررت في قيمة خالية ، فإن رميات makeStyles "لا يمكنها العثور على فئات غير محددة" من الخطأ. في بعض الأحيان لا أمتلك دعائم لأمر بها ، فماذا يمكنني تمريرها؟

krazyjakee حاول const c = useStyles({});

krazyjakee حاول const c = useStyles({});

شكرا هذا عملت!

لقد صادفت هذا الخطأ مع النسخ المطبوعة 3.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({}); "الطريقة" الآن؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات