first cut at typescript support