ค้นหาเว็บไซต์

reactjs - ปัญหาประเภท 'any' ของ Typescript สำหรับตัวแปรที่ไม่มีอยู่


ฉันกำลังศึกษา Typescript และเจอปัญหาที่ดูเหมือนจะแก้ไขไม่ได้ เมื่อพยายามเรนเดอร์คอมโพเนนต์ที่ถูกเมโมไทซ์ (ฉันกำลังใช้ React) ฉันได้รับข้อความแสดงข้อผิดพลาดดังนี้:

TS7006: Parameter '_ref' implicitly has an 'any' type.

เหตุผลที่สิ่งนี้ทำให้ฉันสับสน คือไม่ว่ายังไงฉันก็ไม่สามารถเห็นได้ว่า property _ref นี้มาจากไหน

นี่คือโค้ดของทั้งคอมโพเนนต์ และหน้าที่พยายามเรนเดอร์มัน:

// Dependencies
import React, { memo } from 'react';

// Styles

// Props
interface BuildingBlockProps {
  id: number,
  top: number,
  left: number
}

const BuildingBlock: React.FC<BuildingBlockProps> = ({id, top, left}: BuildingBlockProps) => {
  return (
    <React.Fragment>
      <div
        id={`building-block-${id + 1}`}
        className="absolute w-12 h-12 bg-red-500 rounded-full"
        style={{ top: top + '%', left: left + '%' }}
      />
    </React.Fragment>
  );
}; 

// Export memoized component
const _BuildingBlock = memo(BuildingBlock);
export default _BuildingBlock;

import React from 'react';

import _BuildingBlock from '../components/atoms/BuildingBlock';

const TestPage = () => {
  return (
    <div>
      <_BuildingBlock id={1} top={2} left={3}/>
    </div>
  );
};

export default TestPage;

ฉันพยายามตรวจสอบการตั้งค่า webpack, babel ของฉัน รวมถึงสิ่งต่างๆ อย่างไฟล์ตั้งค่า Tailwind และ postcss ของฉันด้วย แต่ฉันก็ยังไม่เห็นว่ามีอะไรผิดพลาด หากใครมีคำแนะนำฉันจะซาบซึ้งมาก!

นอกจากนี้ ฉันสามารถให้รายการ dependencies ในไฟล์ package.json ของฉันได้หากนั่นจะช่วยในการแยกหาวิธีแก้ไขที่เป็นไปได้

แก้ไข: ข้อความแสดงข้อผิดพลาดทั้งหมดที่ฉันได้รับคือ:

./src/components/atoms/BuildingBlock.tsx 8:43-47 [tsl] ERROR in C:\Users\liam_\Desktop\Business\Nixon-Digital\Website\nixon-digital\client\src\components\atoms\BuildingBlock.tsx(8,44) TS7006: Parameter '_ref' implicitly has an 'any' type. ts-loader-default_e3b0c44298fc1c14 @ ./src/pages/TestPage.tsx 2:0-63 4:92-106 @ ./src/index.tsx 11:0-40 29:47-55 webpack 5.75.0 compiled with 1 error in 6817 ms

ซึ่งเท่าที่ฉันสามารถบอกได้คือกำลังชี้ไปที่จุดสิ้นสุดของบรรทัด: id: number, ซึ่งฉันไม่เข้าใจเลย

อัปเดต: หลังจากที่ล้างและสร้างโปรเจกต์ใหม่แบบทีละขั้นตอน ผมคิดว่าผมได้หาสาเหตุแล้วว่าปัญหามาจากการเพิ่มบรรทัดต่อไปนี้ในไฟล์ webpack.config.js ของผม:

{ test: /\.tsx?$/, loader: "babel-loader" },

ดังนั้นดูเหมือนว่าปัญหาจะเกี่ยวข้องกับการใช้ Babel ด้วยเหตุผลบางประการ ฉันจะยังคงหาวิธีแก้ไขปัญหานี้ต่อไป เพราะฉันรู้สึกว่า Babel มีความสำคัญสำหรับการแปลง Typescript

คำตอบ #1

ดูเหมือนว่าคุณยังไม่ได้กำหนดว่า memo() คืออะไรที่นี่:

const _BuildingBlock = memo(BuildingBlock);

นี่ควรจะเป็นบางอย่างเช่น:

const _BuildingBlock = memo<Props>(BuildingBlock);

คุณสามารถตรวจสอบการกำหนดชนิดของ memo (คลิกขวาใน VSCode) เพื่อดูว่ามันคาดหวังชนิดใด