mak_ufo
@mak_ufo

Почему данный код работает?

Есть файл config.json:
{
    "token": "121212"
}


В файле пытаюсь его подключить так:
interface config {
    token: string,
    age: number
}

const config: config = require('./../config.json');


И при команде tsc всё компилируется без ошибок, хотя поля age в документе у меня нет. Почему так?
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
Вот поэтому (исходник: https://github.com/DefinitelyTyped/DefinitelyTyped... ):
interface NodeRequireFunction {
    (id: string): any;
}

interface NodeRequire extends NodeRequireFunction {
    resolve(id: string): string;
    cache: any;
    extensions: any;
    main: NodeModule | undefined;
}

declare var require: NodeRequire;

Результат работы require типизирован как any, а any можно положить в переменную любого другого типа (так сделано, чтобы any отрабатывал как средство отключения строгой типизации).

Чтобы выполнять проверку типов, вам либо нужно подключать config.json не как json, а как модуль, и делать это средствами TypeScript, либо парсить JSON средствами, валидирующими по JSON Schema.

Можете посмотреть этот проект: https://github.com/JohnWeisz/TypedJSON (правда требует работы с декораторами).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы