检查对象不是打字稿中任何类的实例

时间:2020-02-13 18:01:03

标签: typescript class object typechecking

我有一个接受对象并对其进行代理的函数。

我不希望它代理类,我想用参数类型来断言。

我该怎么做?


type NonClassObject = ???;
export function createObjectProxy(obj: NonClassObject) {
  return new Proxy(obj, {});
}

const foo: NonClassObject = {};
const bar: NonClassObject = {} as HTMLElement; // this should be a type error

除了构造函数的类型外,似乎没有太多区别两者。我不确定是否可以说Exact<tyepof OBJ.constructor, Object> ...,但我现在正在研究实用程序类型。

enter image description here enter image description here


关于某事: enter image description here


死角:https://github.com/Microsoft/TypeScript/issues/3841

1 个答案:

答案 0 :(得分:0)

关于使构造函数类型更定义(https://github.com/Microsoft/TypeScript/issues/3841)尚有一个未解决的问题,但它已有4年的历史,而且似乎无处可寻。

作为权宜之计,我刚刚开始在所有课程中添加{ _noMyProjectProxy: true },并列出所有我无法访问的内容。看起来像这样:

type NonClassObject<TYPE> = 
  TYPE extends HTMLElement ? never :
  TYPE extends Event ? never :
  TYPE extends OtherClass ? never :
  TYPE extends { _noMyProjectProxy: any } ? never : 
  TYPE;

export function createObjectProxy<TYPE extends object>(obj: NonClassObject<TYPE>) {
  return new Proxy(obj, {});
}

它不漂亮也不优雅,但是在没有其他效果的情况下就可以使用。