typescript 中泛型工具类型是如何实现的