如何解决Angular rambda 处理从不可变数组操作返回的只读类型
我在使用 rambda(兼容打字稿的 ramda 克隆)时遇到问题,将其用于选择器的实用程序功能。 Rambda 通过为其实用函数设置只读返回和输入类型来强制执行不变性。
我正在寻找有关如何更改代码库以使用不可变只读数组的建议。
如果您需要,这里有一个有效的 stackblitz。
- /app/courses/reducers/courses.reducer.ts
- /app/courses/components/course-list/course-list.component.ts
例如。 Rambda 的 typescript 定义文件使用。
export function filter<T>(predicate: Predicate<T>): (input: readonly T[]) => readonly T[];
使用标准的命令式代码不需要接口是只读的
const selectFoos = createSelector(
selectAllFoos,foos => foos.filter(R.identity)
)
// => Selector<object,Foo>
如果我在选择器中使用 R.filter
,则返回类型为 readonly: T[]
const selectFoos = createSelector(
selectAllFoos,R.filter<Foo>(R.identity),// becomes `readonly Foo[]`
)
// => Selector<object,readonly Foo[]>
更改我使用所选 observable 的类型确实可以解决类型错误,但有没有更好的方法来处理它?
我想在我的新工作中使用 rambda,但不要认为在开始时将所有代码更改为只读以适合 rambda 是一个好主意,而且我不确定如果我使用管道会发生什么将该值转换为我无法控制的其他内容,这些内容不会接受只读接口。
@Component({ ... })
class FooComponent implements OnInit {
/* without the readonly property there is a type error */
// $foos: Observable<Foo[]>
/* readonly property added to interface */
$foos: Observable<readonly Foo[]>
constructor(private store: Store<AppState>){}
ngOnInit(): void {
this.foos$ = this.store.pipe(select(selectFoos))
}
}
为任何帮助干杯。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。