typescript - Benzersiz bir sınıf döndüren bir fonksiyonun tipini nasıl belirtirim?


Her seferinde yeni bir sınıf döndüren bir fonksiyonum var, bu bir sınıf fabrikasıdır:

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

oyun alanı

Ama bir çağrının sınıfını veya örneklerini başka bir çağrıya hatasız atayabilirim.

SSS#Sınıflar ne zaman ve neden nominal olur? bölümünde, korumalı veya özel üyelere sahip bir sınıfın, değiştirilemez oldukları anlamında nominal hale geldiği belirtiliyor (aslında tam olarak böyle yazmıyor, ama sanırım fikir bu).

i1 türünün i2 türüne atanamayacağını TypeScript’in tespit edebilmesi için foo yazmanın bir yolu var mı?