minigame-api-typings icon indicating copy to clipboard operation
minigame-api-typings copied to clipboard

能否将订阅消息的状态定义为字面量枚举

Open chenpangzi opened this issue 9 months ago • 1 comments

现在是定义为string 希望定义为 "accept" | "reject" | "ban" | "filter"

interface RequestSubscribeMessageSuccessCallbackResult {
        /** [TEMPLATE_ID]是动态的键,即模板id,值包括'accept'、'reject'、'ban'、'filter'。'accept'表示用户同意订阅该条id对应的模板消息,'reject'表示用户拒绝订阅该条id对应的模板消息,'ban'表示已被后台封禁,'filter'表示该模板因为模板标题同名被后台过滤。例如 { errMsg: "requestSubscribeMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息 */
        [TEMPLATE_ID: string]: string,
        /** 接口调用成功时errMsg值为'requestSubscribeMessage:ok' */
        errMsg: string
    }

建议定义为

interface RequestSubscribeMessageSuccessCallbackResult {
        /** [TEMPLATE_ID]是动态的键,即模板id,值包括'accept'、'reject'、'ban'、'filter'。'accept'表示用户同意订阅该条id对应的模板消息,'reject'表示用户拒绝订阅该条id对应的模板消息,'ban'表示已被后台封禁,'filter'表示该模板因为模板标题同名被后台过滤。例如 { errMsg: "requestSubscribeMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息 */
        [TEMPLATE_ID: string]: "accept" | "reject" | "ban" | "filter"
        /** 接口调用成功时errMsg值为'requestSubscribeMessage:ok' */
        errMsg: string
    }

包括 wx.getSetting 接口里的定义也是

chenpangzi avatar Feb 06 '25 01:02 chenpangzi

有个问题是,这个定义方式其实并不被 TS 接受:

interface RequestSubscribeMessageSuccessCallbackResult {
    [TEMPLATE_ID: string]: 'accept' | 'reject' | 'ban' | 'filter'
    errMsg: string
//  ^
//  Property 'errMsg' of type 'string' is not assignable to 'string' index type '"accept" | "reject" | "ban" | "filter"'. ts(2411)
}

或许可以用 { [id: string]: 'a' } & { errMsg: string } 来回避,但处理起来会复杂一些

SgLy avatar Feb 07 '25 12:02 SgLy