https://blog.cckim.cn/posts/type-program/