https://blog.cckim.cn/posts/v8-type-typescript/