我有一个接受对象并对其进行代理的函数。
我不希望它代理类,我想用参数类型来断言。
我该怎么做?
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>
...,但我现在正在研究实用程序类型。
答案 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, {});
}
它不漂亮也不优雅,但是在没有其他效果的情况下就可以使用。