add typescript support