Typescript - назначить переменную null

У меня есть такой класс:

export class Signal {
    method: (d: any) => void;
    otherMethod: (d: any) => void;


    public resetMethods(): void {
        this.method = null;
        this.otherMethod = null;
    }
}

к сожалению, это больше не будет компилироваться, пока какая-то предыдущая версия не вызывала проблем, теперь на этапе компиляции я получаю следующую ошибку:

 Type 'null' is not assignable to type '(d: any) => void'.

для структуры моего кода важно сделать эти свойства "нулевыми" и переназначить их позже, как я могу исправить жалобы компилятора?

Всего 3 ответа


type Nullable<T> = T | null
export class Signal {
    method: Nullable<(d: any) => void> = null;

    public resetMethods(): void {
        this.method = null;
    }
}

Создать пользовательский тип Nullable , очень полезно

детская площадка


Поскольку код прямо сейчас, вы все равно должны объявить поля необязательными, поскольку им не присваивается значение. И в этом случае вы можете назначить undefined чтобы сделать TS счастливым:

export class Signal {
    method?: (d: any) => void;
    //    ^
    otherMethod?: (d: any) => void;
    //         ^


    public resetMethods(): void {
        this.method = undefined;
        this.otherMethod = undefined;
    }
}

Если вы действительно хотите / должны назначить null , тогда вы можете использовать тип объединения:

export class Signal {
    method?: ((d: any) => void) | null;
    otherMethod?: ((d: any) => void) | null;


    public resetMethods(): void {
        this.method = null;
        this.otherMethod = null;
    }
}

Определите тип для ваших «методов»:

type MyMethod = (d: any) => void;

Затем либо объявить их с этим | null | null :

method: MyMethod | null;

Или дайте себе удобство типа:

type NullableMyMethod = MyMethod | null;

и использовать это

method: NullableMyMethod;

На площадке


Есть идеи?

10000