我试着在this的基础上创建IsAny
个泛型.
我的IsAny
种通用型似乎很好用.
const testIsUnknown2: IsUnknown<any> = true; // problem here, must be false
但是当我把IsAny
个普通的改成一个注释的时候,它又能正常工作了.那为什么会这样?因为我在这IsAny
个泛型中看不到任何区别,但我的泛型似乎在其他泛型中不起作用.
// type IsAny<T> = 0 extends (1 & T) ? true : false;
type IsAny<T> = unknown extends T ? (T extends object ? true : false) : false;
const testIsAny1: IsAny<any> = true;
const testIsAny2: IsAny<unknown> = false;
const testIsAny3: IsAny<string> = false;
const testIsAny4: IsAny<object> = false;
// unknown is only assignable to two types: unknown and any
type IsUnknown<T> = unknown extends T ? (IsAny<T> extends true ? false : true) : false;
const testIsUnknown1: IsUnknown<unknown> = true;
const testIsUnknown2: IsUnknown<any> = true; // problem here, must be false
const testIsUnknown3: IsUnknown<object> = false;
const testIsUnknown4: IsUnknown<number> = false;