Работает ли проверка интерфейса машинописи после компиляции как средство проверки данных? - PullRequest
1 голос
/ 31 января 2020

Я использовал schema-inspector для проверки. С тех пор, как я начал использовать TypeScript, могу ли я избавиться от проверки schema-inspector и создать правила для выдачи и обнаружения ошибок в зависимости от того, соответствуют ли данные интерфейсу TS?

1 Ответ

0 голосов
/ 31 января 2020

TypeScript не имеет конструкторов данных во время выполнения, единственной структурой времени выполнения, созданной TS, является Enum, остальными являются только аннотации типов, которые используются только во время компиляции, во время выполнения типы не существуют.

Тем не менее, мы можем сказать, что типы TS являются только информацией о заключенном нами контракте / допущении, и они не проверяются во время выполнения.

Если вы хотите иметь конструкторы значений, то функции, которые будут создавать правильное значение заданного введите нужное вам или создайте его самостоятельно, либо используйте стороннюю библиотеку.

Ниже приведен пример пользовательского конструктора типа + значение. Этот вид инструмента позволяет создавать только допустимые значения, которые соответствуют предположению типа:

// type
type SomeType = { field: string }
// value constructor
const createSomeType = (a: any): SomeType => {
  const fieldInside = 'field' in a;
  const stringField = typeof a.field === 'string';

  if (!fieldInside || !stringField) {
    throw TypeError('SomeType value was not able to be created');
  }
  return { field: a.field }; // proper value
}

const someValue = createSomeType({ field: 'someStr' }) // correct no error
createSomeType({ otherField: 'x' }) // exception
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...