收藏
回答

typescript的setData声明文件并不起作用

如下图所示,logs不论变成什么都不会报错:



最后一次编辑于  02-23  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

1 个回答

  • 乘风破浪
    乘风破浪
    05-10

    首先,列个简单的 ts 代码:

    interface IOptions {
      a: string;
    }
     
    function doit(options: IOptions & any) {
      console.log(options);
    }
     
    doit({});

    上述代码中,调用 doit 方法 参数中并未指定 a 属性,函数的定义后面 用了一个  & any


    从 Page 的定义来看,原始定义如下:

    interface PageConstructor {
      <D extends IAnyObject, T extends IAnyObject & PageInstance>(
        options: PageInstance<D, T> & T
      ): void
    }


    如果按照楼主的写法: Page<IData, any> ,那上述代码中options 的 D = IData,T = any,与上面的例子一样的道理,


    如果需要让编译器校验 data 里面的属性,则需要如下的写法:


    interface IData {
      logs: number;
    }
     
    interface IPage {
    }
     
    Page<IData, IPage>({
      data: {
        logs: 1
      }
    })



    05-10
    赞同
    回复