typescript - Cum pot preveni ca un tip generic să ia „any” ca argument de tip?


Cum pot preveni ca un tip generic să accepte any ca argument de tip? Dacă argumentul meu generic este restricționat prin folosirea cuvântului cheie extends, se simte ciudat că poate fi înlocuit cu any.

Din câte înțeleg, totul extinde any, dar any nu ar trebui să extindă nimic (altceva decât any însuși).

Iată un exemplu:

type OneOrTwo = 1 | 2;
type MyType<T extends OneOrTwo> = T;
const t1: MyType<OneOrTwo> = 1; // OK
const t2: MyType<any> = 2;      // OK
const t3: MyType<OneOrTwo> = 3; // Error: Type '3' is not assignable to type 'OneOrTwo';
const t4: MyType<any> = 4;      // OK?? How can I prevent this?

Pot să fac ca TypeScript să mă împiedice să scriu t4 așa? Fie prin schimbarea codului, fie folosind o opțiune tsconfig poate?

Răspuns #1

La momentul scrierii, nu puteți. Scrierea any oriunde în cod înseamnă că TypeScript nu va efectua NICIUN fel de verificări, iar acest lucru se propagă. Puteți preveni implicit any în unele cazuri, setând o combinație a următoarelor:

  • strict
  • fărăAnyImplicit
  • stricNullCecks
  • fărăVerificăriGenericeStrict
  • tipuriDeFuncțiiStrict
  • apelLegatStrict

în interiorul tsconfig.json