我有一个函数,每次工厂都返回一个新类:
function foo() {
const s = Symbol();
return class {
protected readonly s: typeof s = s;
};
}
const c1 = foo();
const c2 = foo();
const cc: typeof c1 = c2; // Error expected
const i1 = new c1();
const i2 = new c2();
const ii: typeof i1 = i2; // Error expected
但是我可以将一个调用的类或实例分配给另一个调用而不会出错。
FAQ#When and why are classes nominal?说,具有受保护成员或私有成员的类成为 nominal ,因为它们是不可互换的(这与它所说的不完全一样,但这就是我的想法) )。
是否可以键入foo
,以便TypeScript可以检测到typeof i1
无法分配给typeof i2
?