代码之家  ›  专栏  ›  技术社区  ›  Patrick Kenny

TS2339属性myProperty在类型SetStateAction上不存在<User>

  •  0
  • Patrick Kenny  · 技术社区  · 3 年前

    我试图在React中使用TypeScript,但出现了一个我不明白的错误:

    <html>TS2339: Property 'subEnd' does not exist on type 'SetStateAction&lt;User&gt;'.<br/>Property 'subEnd' does not exist on type '(prevState: User) =&gt; User'.
    

    我试着用 this useState ,我得到一个错误:

    function fetchUserInfo(
      data: InterfaceJsonUserInfo,
      setUserObject: React.Dispatch<React.SetStateAction<User>>
    ) {
      setUserObject({
        id: data.id,
        subEnd: new Date(data.subEnd),
        subExpired() {
          const subEndDate = this.subEnd;
          const nowDate = new Date();
          return (subEndDate > nowDate);
        },
      }
    

    这是我的界面:

    export interface User {
      id: string, // Uuid
      subEnd: Date,
      subExpired: () => boolean,
    }
    

    我不明白为什么我会出错,因为 subEnd 在用户界面上。

    当我从 <User> React.Dispatch<React.SetStateAction<any>> ,代码实际上可以工作,但是我想指定类型而不是使用 any

    1 回复  |  直到 3 年前
        1
  •  1
  •   CertainPerformance    3 年前

    您需要指定 this 是一个 User 打电话的时候 subExpired

    export interface User {
      id: string, // Uuid
      subEnd: Date,
      subExpired: (this: User) => boolean,
    }