Skip to content

Commit 9de3874

Browse files
committed
fix: fix types
see microsoft/TypeScript#46855
1 parent f5d2a86 commit 9de3874

File tree

5 files changed

+15
-8
lines changed

5 files changed

+15
-8
lines changed

src/core/field.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { EventEmitter } from "./events";
2-
import { Disposable, ElementType } from "./shared";
2+
import { AsArray, Disposable, ElementType } from "./shared";
33

44
export interface Field<T> extends EventEmitter {
55
readonly id: string;
@@ -64,7 +64,9 @@ export interface ChildField {
6464

6565
export interface FieldNode<T> extends Field<T> {
6666
createChild<K extends ChildKeyOf<T>>(key: K): ChildFieldNode<T[K]>;
67-
createChildArray<K extends ChildArrayKeyOf<T>>(key: K): ChildFieldArray<ElementType<T[K]>>;
67+
createChildArray<K extends ChildArrayKeyOf<T>>(
68+
key: K
69+
): ChildFieldArray<ElementType<AsArray<T[K]>>>;
6870
}
6971

7072
export interface ChildFieldNode<T> extends FieldNode<T>, ChildField {}

src/core/impl/fieldNode.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ChildArrayKeyOf, ChildFieldArray, ChildFieldNode, ChildKeyOf } from "../field";
2-
import { ElementType } from "../shared";
2+
import { AsArray, ElementType } from "../shared";
33
import { FieldImpl } from "./field";
44
import { FieldArrayImpl } from "./fieldArray";
55
import { Child, Getter, Parent, Setter } from "./shared";
@@ -56,7 +56,9 @@ export class FieldNodeImpl<T> extends FieldImpl<T> implements ChildFieldNode<T>
5656
return field;
5757
}
5858

59-
createChildArray<K extends ChildArrayKeyOf<T>>(key: K): ChildFieldArray<ElementType<T[K]>> {
59+
createChildArray<K extends ChildArrayKeyOf<T>>(
60+
key: K
61+
): ChildFieldArray<ElementType<AsArray<T[K]>>> {
6062
const path = `${this.path}.${String(key)}`;
6163
if (
6264
Object.getPrototypeOf(this.getDefaultValue()) !== Object.prototype ||
@@ -76,8 +78,8 @@ export class FieldNodeImpl<T> extends FieldImpl<T> implements ChildFieldNode<T>
7678
`You are creating a field array '${path}', but the value of '${path}' is not a pure array. This may cause unexpected errors.`
7779
);
7880
}
79-
type E = ElementType<T[K]>;
80-
const getter: Getter<T, readonly E[]> = value => value[key];
81+
type E = ElementType<AsArray<T[K]>>;
82+
const getter: Getter<T, readonly E[]> = value => value[key] as AsArray<T[K]>;
8183
const setter: Setter<T, readonly E[]> = (value, x) => {
8284
if (Object.is(value[key], x)) {
8385
return value;

src/core/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export { Disposable, ElementType } from "./shared";
1+
export { AsArray, Disposable, ElementType } from "./shared";
22
export {
33
Field,
44
Snapshot,

src/core/shared.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
export type Disposable = () => void;
22

33
export type ElementType<T extends readonly unknown[]> = T[number];
4+
5+
export type AsArray<T> = T extends readonly unknown[] ? T : never;

src/react/core.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useEffect, useState } from "react";
22
import {
3+
AsArray,
34
ChildArrayKeyOf,
45
ChildKeyOf,
56
CreateFormParams,
@@ -37,7 +38,7 @@ export function useChild<T, K extends ChildKeyOf<T>>(field: FieldNode<T>, key: K
3738
export function useChildArray<T, K extends ChildArrayKeyOf<T>>(
3839
field: FieldNode<T>,
3940
key: K
40-
): FieldArray<ElementType<T[K]>> {
41+
): FieldArray<ElementType<AsArray<T[K]>>> {
4142
const [childArray] = useState(() => field.createChildArray(key));
4243

4344
useEffect(() => {

0 commit comments

Comments
 (0)