Вот поэтому (исходник:
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 (правда требует работы с декораторами).