Zod é muito bom mesmo, porem seu exemplo esta aceitando outras strings pois vc esta fazendo casting de tipo quando usa o "as", forcando um tipo:
'const a: IStdin['a'] = d.toString().trim() as IStdin['a']'
O definicao de tipos vem do developer, entao ele é responsavel por acertar e ter controle dos tipos. Para runtime sempre bom ter uma validacao, a vantagem de usar Zod em relacao com outros como Joi, Yup é que ele casa muito bem com typescript, ajudando assim no desenvolvimento.