检查对象不是打字稿中任何 class 的实例
Check that object is not instance of any class in typescript
我有一个接收对象并代理它们的函数。
我不希望它代理 类,我想用参数类型断言。
我该怎么做?
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>
...但我现在正在研究实用程序类型。
关于某事:
关于使构造函数类型更明确 (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, {});
}
它既不漂亮也不优雅,但它可以在没有其他东西的情况下工作。
我有一个接收对象并代理它们的函数。
我不希望它代理 类,我想用参数类型断言。
我该怎么做?
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>
...但我现在正在研究实用程序类型。
关于某事:
关于使构造函数类型更明确 (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, {});
}
它既不漂亮也不优雅,但它可以在没有其他东西的情况下工作。