add type script support