typescript - Existe uma maneira de forçar os chamadores do construtor Set<T> a fornecer um parâmetro de tipo?
De lib.es2015.collection.d.ts:
interface SetConstructor {
new <T = any>(values?: readonly T[] | null): Set<T>;
readonly prototype: Set<any>;
}
declare var Set: SetConstructor;
O tipo de T em Set<T> padrão para any. No entanto, eu gostaria de garantir em nosso projeto que qualquer chamador do construtor Set forneça o argumento de tipo.
Então
new Set<any>();
seria válido mas
new Set();
seria um erro.
Isso é possível diretamente em TypeScript? Se não, existe alguma ferramenta de tempo de compilação que possa ser usada para o mesmo propósito?
Resposta #1
Você pode tentar o próximo exemplo:
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
Não há erro de compilação, no entanto, você não poderá chamar nenhum método de [set].
Aqui, o TypeScript trata [set] no meu exemplo como um valor vazio, sem propriedades e métodos.
