typescript - Finns det ett sätt att tvinga anropare av Set<T>-konstruktorn att ange en typparameter?
Från lib.es2015.collection.d.ts:
interface SetConstructor {
new <T = any>(values?: readonly T[] | null): Set<T>;
readonly prototype: Set<any>;
}
declare var Set: SetConstructor;
Typen av T i Set<T> standardiseras till any. Men jag skulle vilja att vi i vårt projekt krävde att alla som anropar Set-konstruktorn tillhandahåller typargumentet.
Så
new Set<any>();
skulle vara giltigt men
new Set();
skulle vara ett fel.
Är detta möjligt direkt i TypeScript? Om inte, finns det något befintligt verktyg vid byggtid som kan användas för samma ändamål?
Svar #1
Du kan prova nästa exempel:
declare global {
interface SetConstructor {
new(): never; // thanks @jcalz for pointing this out
new <T>(values?: readonly T[] | null): Set<T>;
readonly prototype: Set<any>;
}
var Set: SetConstructor;
}
// no compile error
const set = new Set(); // never type
set // unable to call any method, because [set] has [never] type
Det finns inget kompilatorfel, men du kommer inte att kunna anropa någon metod av [set].
Här behandlar TypeScript [set] i mitt exempel som ett tomt värde, utan egenskaper och metoder.
