簡體   English   中英

反應 - Typescript 默認值在 class 構造函數錯誤

[英]React - Typescript default value in class constructor error

我像這樣制作了 Class:非常簡單。 我有一個構造器,有一個值:必須通過的 ID 有一個參數,另一個是可選的。

export default class Player {
    // 1. Typage des propiétés d'un participant à GF.
    id: number;
    name: string;
    picture: string;
    status: number;
    achievement: Array<number>;
    biography: string;
    pictures: Array<number>;
    created?: Date;
     
    // 2. Définition des valeurs par défaut des propriétés d'un Player.
    constructor(
     id: number,
     name: string = 'name',
     picture: string = 'http://...',
     status: number = 0,
     achievement:[0],
     biography:string = "",
     pictures:[0],
     created: Date = new Date()
    ) {
     // 3. Initialisation des propiétés d'un Player.
     this.id = id;
     this.name = name;
     this.picture = picture;
     this.status = status;
     this.achievement = achievement;
     this.biography = biography;
     this.pictures = pictures;
     this.created = created;
    }
   }

我想像這樣制作一個新組件 REACT:

import React, {FunctionComponent, useState} from 'react';
import PlayerForm from '../components/player/player-form';
import Player from '../models/player.class';

const PlayerAdd: FunctionComponent = () => {
    const [id] = useState<number>(new Date().getTime());

    const [player] = useState<Player>( new Player(id) ); 

    return (
        <div className="row">

        </div>
    )
 

}

D:/feodalapp/src/pages/player-add.tsx
TypeScript error in D:/feodalapp/src/pages/player-add.tsx(8,40):
Expected 7-8 arguments, but got 1.  TS2554

     6 |     const [id] = useState<number>(new Date().getTime());
     7 | 
  >  8 |     const [player] = useState<Player>( new Player(id) ); 
       |                                        ^
     9 | 
    10 |     return (
    11 |         <div className="row">

自從我決定在我的項目中使用它以來,我失去了 TYPESCRIPT 的很多時間:: 我變得瘋狂

我做錯了什么?

非常感謝

您應該能夠向您的 state 應用interfacetype ,而不是 class 實例。

首先,定義一個interface

interface Player {
  id: number;
  name: string;
  picture: string;
  status: number;
  achievement: Array<number>;
  biography: string;
  pictures: Array<number>;
  created?: Date;
}

創建 object state:

const initialState = {
  // other props
  id: 1
} as Player;

const [player, setPlayer] = useState<Player>(initialState); 

這是您可以做的一個技巧,以便僅使用一些字段初始化 Player object:

export default class Player {
  // 1. Typage des propiétés d'un participant à GF.
  id: number;
  name: string = "name";
  status: number = 0;
  achievement: Array<number> = [0];
  biography: string = "";
  pictures: Array<number> = [0];
  created: Date = new Date();

  // 2. Définition des valeurs par défaut des propriétés d'un Player.
  constructor(id: number, init?: Partial<Player>) {
    this.id = id;
    Object.assign(this, init);
  }
}
// you should be able to do this now:
const player = new Player(id)

如果您還想創建一個帶有其他字段的播放器:

const otherPlayer = new Player(new Date().getTime(), {name: "Bob"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM