Typescript - назначить переменную null - PullRequest
2 голосов
/ 16 января 2020

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

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 ]

3 голосов
/ 16 января 2020
type Nullable<T> = T | null
export class Signal {
    method: Nullable<(d: any) => void> = null;

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

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

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

2 голосов
/ 16 января 2020

Поскольку код прямо сейчас, вы все равно должны объявлять поля как необязательные, так как им не присваивается значение. И в этом случае вы можете назначить 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;
    }
}
1 голос
/ 16 января 2020

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

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

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

method: MyMethod | null;

Или укажите удобный для вас тип:

type NullableMyMethod = MyMethod | null;

и используйте это

method: NullableMyMethod;

На детской площадке

...