Poate TypeScript să-mi spună care șiruri de caractere din codul meu sunt „nesigure”?


Avem șiruri „sigure” în baza noastră de cod TypeScript:

button.on('click', () => {}); // mistyping 'click' is an error

dar și șiruri nesigure:

_.omit(obj, 'a'); // no error if I mistype 'a'

Există o modalitate de a lista astfel de șiruri? Cred că TypeScript are cunoștințele despre acest lucru, dar nu sunt sigur dacă se pot extrage din el.

Răspuns #1

Poți defini un tip care conține doar valori sigure:

export type SafeValue = 'foo' | 'bar' | 'baz';

export function omit(param: SafeValue) {
   ...
}

omit('a'); // error

Dacă vrei să știi dacă „a” este o proprietate a obj, poți face ceva de genul acesta:

export function omit<T>(object: T, property: keyof T) {
  payload[value]; // this statement is safe
}

De exemplu, dacă aveți clasa Persoană:

export class Person {
   name: string;
   age: number;
}

Declarația keyof Person va fi egală cu 'name' | 'age'.

 const person = new Person();

 omit<Person>(person, 'age'); // won't emit any error

 omit<Person>(person, 'paws'); // will emit an error:

Argumentul de tip „paws” nu poate fi atribuit parametrului de tip „name” | „age”