'পঠনযোগ্য <{}>' টাইপ করে সম্পত্তি 'মান' বিদ্যমান নেই


155

আমার এমন একটি ফর্ম তৈরি করা দরকার যা কোনও এপিআইর ফেরতের মানের ভিত্তিতে কিছু প্রদর্শন করবে। আমি নিম্নলিখিত কোড সহ কাজ করছি:

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: ''};

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange(event) {
    this.setState({value: event.target.value});
  }

  handleSubmit(event) {
    alert('A name was submitted: ' + this.state.value); //error here
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" value={this.state.value} onChange={this.handleChange} /> // error here
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

আমি নিম্নলিখিত ত্রুটি পাচ্ছি:

error TS2339: Property 'value' does not exist on type 'Readonly<{}>'.

কোডটিতে মন্তব্য করা দুটি লাইনে আমি এই ত্রুটিটি পেয়েছি। এই কোডটি আমারও নয়, আমি এটি প্রতিক্রিয়ার অফিসিয়াল সাইট ( https://reactjs.org/docs/forms.html ) থেকে পেয়েছি , তবে এটি এখানে কাজ করছে না।

আমি তৈরি-প্রতিক্রিয়া-অ্যাপ্লিকেশন সরঞ্জামটি ব্যবহার করছি।


আপনার সমস্যা মিথ্যা অন্যত্র - দেখুন এই ডেমোটি
— টেড

আমি জানি, এটি সমস্ত "সংকলক" ওয়েবসাইটে কাজ করছে, তবে তারা আমাকে github.com/Mic Microsoft /TypeScript- React-Sterter প্রকল্পটি ব্যবহার করার পরামর্শ দিয়েছিল , এবং টাইপস্ক্রিপ্ট প্রতিযোগিতার মাধ্যমে, এটি কাজ করছে না
— লুইস হেনরিক জিম্মারম্যান

উত্তর:


264

Component সংজ্ঞায়িত করা হয় যেমন:

interface Component<P = {}, S = {}> extends ComponentLifecycle<P, S> { }

অর্থ যে রাষ্ট্র (এবং সাজসরঞ্জাম) জন্য ডিফল্ট প্রকার হল: {}।
আপনি যদি নিজের উপাদানটি valueরাজ্যে থাকতে চান তবে আপনার এটির সংজ্ঞা দেওয়া দরকার:

class App extends React.Component<{}, { value: string }> {
    ...
}

বা:

type MyProps = { ... };
type MyState = { value: string };
class App extends React.Component<MyProps, MyState> {
    ...
}

3
ওম, ট্যু ডুড, এটি এখন কাজ করেছে, শুধু আমাকে আরও একটি জিনিস উত্তর দিন, এই বাক্য গঠনটি ঠিক টাইপস্ক্রিপ্টের সাথে সম্পর্কিত? কারণ অফিসিয়াল সাইটে প্রতিক্রিয়া জানানোর সাথে এর মিল কিছু নেই
— লুইস হেনরিক জিম্মারম্যান

3
হ্যাঁ, এটি কঠোরভাবে সম্পর্কিত টাইপস্ক্রিপ্ট।
— নিতজান টোমর

1
ডান সংজ্ঞায়িত: শ্রেণি স্কোয়ারটি React.Comp घटक <<মান: স্ট্রিং}, {}> {...} ... {
— রদ্রিগো পেরেজ বার্গুইস

58

@ নিতজান-টোমারের উত্তর ছাড়াও, আপনার কাছে ইনফেরফেসগুলি ব্যবহার করার বিকল্প রয়েছে :

interface MyProps {
  ...
}

interface MyState {
  value: string
}

class App extends React.Component<MyProps, MyState> {
  ...
}

// Or with hooks, something like

const App = ({}: MyProps) => {
  const [value, setValue] = useState<string>(null);
  ...
};

হয় সুস্থ, যতক্ষণ আপনি সামঞ্জস্যপূর্ণ।


1
আপনার পোস্টের প্রসঙ্গে সামঞ্জস্যপূর্ণ অর্থের পরিমাণটি সংক্ষিপ্ত করে রাখুন যাতে মাঝারি নিবন্ধটি পড়ার প্রয়োজন ছাড়াই এর পুরো মূল্য পাওয়া সম্ভব (যা একটি দুর্দান্ত দরকারী লিঙ্ক, আপনাকে ধন্যবাদ)।
— কার্ল রিখটার

9

সমস্যাটি হ'ল আপনি নিজের ইন্টারফেসের রাষ্ট্রটিকে আপনার উপযুক্ত পরিবর্তনশীল ধরণের 'মান' দিয়ে প্রতিস্থাপনের ঘোষণা করেন নি is

এখানে একটি ভাল রেফারেন্স

interface AppProps {
   //code related to your props goes here
}

interface AppState {
   value: any
}

class App extends React.Component<AppProps, AppState> {
  // ...
}

0

event.targetসব ধরণের EventTargetএকটি মান হয় না যা ধরণের । যদি এটি কোনও ডোম উপাদান থাকে তবে আপনার এটি সঠিক ধরণের করতে হবে:

handleChange(event) {
    this.setState({value: (event.target as HTMLInputElement).value});
}

এটি রাষ্ট্রের পরিবর্তনশীলগুলির জন্য "সঠিক" প্রকারটি নির্ধারণ করবে যদিও সুস্পষ্ট হওয়া সম্ভবত আরও ভাল


আমি মনে করি কনস্ট্রাক্টরের স্ট্রিংটি আরম্ভ করার চেষ্টা করার সময় তিনি ত্রুটিটি পেয়েছেন, ইভেন্ট হ্যান্ডলারটি নয়
— রায়_পোলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.