typescript的setData声明文件并不起作用
发布于 5 年前 作者 nma 8562 次浏览 来自 问答

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

1 回复

首先,列个简单的 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
  }
})
回到顶部