Use TypeScript

Signed-off-by: Oleg Bulatov <oleg@bulatov.me>