Give typescript-runtime-types a try. I don't know how or if this works with Babel, but there is a small section on using it with Webpack and awesome-typescript-loader. I think it does what you're looking for, although the only examples it shows are with interfaces, which may mean you aren't allowed to nest types or use & or | or Pick or other complex type annotations. If that's true, you will just need to use io-ts.