Использование интерфейса вместо любого типа в машинописном тексте - PullRequest
0 голосов
/ 27 мая 2020

enter image description here - это хорошая идея использовать интерфейс вместо любого в качестве типа переменной. скажем, у меня есть 3 функции, в которых я определяю переменные, которые могут иметь буквенно-цифровой формат c. Следовательно, вместо того, чтобы определять его как что-либо, я могу сделать его как интерфейс

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Да, это правильный путь. Целью TS является предоставление типов вместо any значений из javascript.

Цель состоит в том, чтобы ввести все переменные, если вы не знаете их тип - попробуйте использовать generic или unknown вместо any. Тип def более расширяемый, чем интерфейс def. Интерфейс работает для объектов и классов, тип работает для всего, включая примитивы, объединения и логические выводы, но класс может реализовывать только интерфейсы, а не типы.

Если вам нужно утверждать тип, вы можете использовать защиту типа:


const isNumber = (value: unknown): value is number {
  return typeof value === 'number';
}

const something: any = 123;
something += 1; // valid
something.callFake(); // valid

if (isNumber(something)) {
  something += 1; // valid
  something.callFake(); // invalid
}

В вашем случае можно использовать дженерики.

public addRow(row: Row): boolean {
  let constraints: unknown = getConstraints(this.config); // unknown fits too
  let table: any = localStorage.getItem(row.tableName);
  let rowData = {};
}

public getData<T>( // <- T, when we don't know type.
  table_name: string,   entity_name?: string,
  entity_value?: T
): boolean {
  let tableRecord: object[] = [];
  let allTableData: Array<object> = JSON.parse(
    localStorage.getItem(table_name) || ""
  ).data;
}

public deleteRecord<T extends string>( // <- T, when we don't know type.
  table_name: string,
  entity_name: string,
  entity_value: T
): boolean {
  return !!entity_value; // works
}

public updateRecord<T, D extends object>( // <- T, D, when we don't know type.
 table_name: string,
 entity_name: string,
 entity_value: T,
 updation_data: D
): boolean {
  if (typeof entity_name === 'string) {
    // now we know it's a string.
  }
  return !entity_value || !updation_data; // works
}
0 голосов
/ 27 мая 2020

Вы можете использовать машинописный текст type определение. например, если у вас есть несколько типов для переменной, вы можете создать один тип как:

type Foo = Bar1 | Bar2 | Bar3

, где Bar1, Bar2, Bar3 могут быть разными интерфейсами или четные типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...