我最近开始使用 Typescript,并且使用严格模式。在很多情况下,我有一个可为空值的列表,并且我使用 _.filter() 来删除空值。例如,
const users: {id: number, name: string | null}[] = getUsers()
const lowerCaseNames = _(users)
.filter(user => !!user.name)
.map(user => user.name.toLowerCase())
.value()
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为 Typescript 仍然认为 user.name 可以为 null,因此 user.name.toLowerCase() 无效。相反,我不得不将链拆分为多个变量并使用类型转换,这两者都是不幸的:
const users: {id: number, name: string | null}[] = getUsers()
const usersWithNames: {id: number, name: string}[] = _.filter(user => !!user.name) as {id: number, name: string}[]
const lowerCaseNames = _.map(usersWithNames, user => user.name.toLowerCase())
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以告诉 lodash/typescript.filter()在不进行类型转换或不破坏链的情况下摆脱空值?
谢谢!
您可以在内部使用类型保护filter
type User = { id: number; name: string | null }
const haveName = (user: User): user is User & { name: string } => user.name !== null
const users: User[] = []
const lowerCaseNames = _(users)
.filter(haveName)
.map(user => user.name.toLocaleLowerCase())
.value()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2360 次 |
| 最近记录: |