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

macOS JXA调用Things3的schedule方法报错:Named parameters must be passed as an object

问题描述

我尝试使用JXA(Javascript for macOS automation,macOS平台的JS自动化框架)实现macOS下任务管理工具Things 3的自动化功能,运行时遇到报错,花费大量时间自行排查、求助他人都未解决。
我要调用官方文档中描述的如下schedule方法:
schedule_method
调用代码如下:

// Set TaskApp as the app to use
var TaskApp = Application('Things3');
// Get the ToDo from toDos
var task = TaskApp.toDos["test555342343"]
// Get today as a date
var today = new Date()
// Schedule the task for Today
task.schedule(task.id(), {for: today})

运行后返回报错:Error: Error: Named parameters must be passed as an object.
调用其他方法(比如show)时可以正常运行:
show方法示例
可正常运行的示例代码:

// Set TaskApp as the app to use
var TaskApp = Application('Things3');
// Get the ToDo from toDos
var task = TaskApp.toDos["test555342343"]
// Bring Things3 to the Forground
TaskApp.activate()
// Show the task
task.show(task.id())

上述代码可以正常打开选中的待办事项,创建任务时给deadline传入date对象也可正常生效,生成对应截止日期的任务。
该文档仅可在安装了Things3的macOS设备上引用脚本库查看,上述报错同样出现在调用move方法时:传入List Object作为参数也会触发相同错误。

解决方案

该报错由两个JXA的语法问题导致:

  1. 实例方法不需要额外传入实例标识作为首参数
    你已经通过TaskApp.toDos["test555342343"]获取到了目标任务的实例对象,调用该实例的方法时默认作用于当前实例,不需要再把任务ID作为第一个参数传入。
  2. JS保留字作为对象属性名必须加引号包裹
    for是JavaScript的保留关键字,直接作为对象的键名使用会触发语法解析异常,需要用引号包裹该属性名。
    修改后的可运行代码如下:
var TaskApp = Application('Things3');
var task = TaskApp.toDos["test555342343"]
var today = new Date()
// 移除首参数id,给保留字for加引号
task.schedule({"for": today})

move方法的调用遵循相同规则,示例如下:

var TaskApp = Application('Things3');
var task = TaskApp.toDos["test555342343"]
// 假设要移动到收件箱列表
var targetList = TaskApp.lists["收件箱"]
// 同样不需要传id,参数键名如果是保留字要加引号
task.move({"to": targetList})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:45:00