Ts对象变量参数传入 没有提示的原因

246 阅读1分钟

事情是这样的,我有一个方法,接收参数,然后我传入的是对象变量,然后我对象里面有多余的属性,我心想ts这咋没提示呢,所以有了这篇博客,废话不多话,开干。

  • Form这个参数我的想法是,比如我传递了HomeProps以外的属性就提示信息,然后我意外的发现,当然传递少某个参数的时候,比如没有传递offsetts会给出提示,当我传入的参数多了,则不会有提示。
interface HomeProps {
  searchValue: string;
  offset: Offset;
  baseIcons: BaseIcons[];
  functionData: FunctionData<FunctionItem>[];
  swipeImages: string[];
  validators: (props: HomeProps) => boolean;
};

function createInstance<T>(c: new (...args: any[]) => T, props: HomeProps): T {
  props.validators(props);
  return new c(props);
}
const state = reactive(createInstance<Home>(Home, Form));
  • 发现问题所在了,开始测试
  • 当传入的参数是对象变量
    1. 自动推导类型,不会检查是否有多余的属于,只关注是否包含所需的参数,如果有 就会通过。(使用这个参数的时候不存在还是会爆红线的。)
      image.png image.png
  • 当传入的参数是对象字面量形式
    1. Ts会直接对对象字面量进行类型检查,参数少传递和多传递都会有提示。 image.png

所以我的问题是:因为传入的是对象变量的形式,Ts就是这种检测机制,属性不存在你去使用还是会有提示的。
但是我就是想传入的时候给个提示呢,目前没有什么好的办法,我是通过校验字段在控制台输出一下多传递了哪个参数(好像也没必要昂)

image.png

image.png