You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript类函数成员初始化与调用检查的语法咨询

TypeScript函数类型成员初始化与调用检查方案

一、初始化函数类型成员为null/undefined的正确语法

你的userInfoChangedCallback当前类型是UserCallback,而null/undefined不属于这个函数类型的范畴,所以首先需要扩展成员的类型,允许它是函数或者null/undefined,再完成初始化。

两种常见写法:

  • 初始化为null:
    private userInfoChangedCallback: UserCallback | null = null;
    
  • 初始化为undefined:
    private userInfoChangedCallback: UserCallback | undefined = undefined;
    

二、调用前的正确检查方式

你当前代码里的if判断逻辑完全反了——如果userInfoChangedCallback为null,你反而去调用它,这会直接抛出错误。正确逻辑是确认回调存在后再调用,常用检查方式有两种:

  1. 严格排除null/undefined:

    if (this.userInfoChangedCallback !== null) {
        this.userInfoChangedCallback(new User(username, displayName));
    }
    

    (如果用undefined就检查!== undefined,或者用!= null同时覆盖null和undefined的情况)

  2. 利用真值判断(函数是真值,null/undefined是假值):

    if (this.userInfoChangedCallback) {
        this.userInfoChangedCallback(new User(username, displayName));
    }
    

三、修正后的完整代码

import { User } from './User'; // 修正原代码里的冒号为分号
export type UserCallback = (user: User | null) => void;

export class MyClass {
    // 扩展类型并初始化为null
    private userInfoChangedCallback: UserCallback | null = null;

    setCallback(callback: UserCallback) {
        this.userInfoChangedCallback = callback;
    }

    register = async(username: string, displayName: string, password: string) => {
        // do some things here...

        // 修正判断逻辑,确认回调存在后再调用
        if (this.userInfoChangedCallback !== null) {
            this.userInfoChangedCallback(new User(username, displayName));
        }
    }
}

内容的提问来源于stack exchange,提问作者Marc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:15:36