在定义中表示 UNO 输出参数
Posted
技术标签:
【中文标题】在定义中表示 UNO 输出参数【英文标题】:Representing UNO out parameters in definitions 【发布时间】:2017-09-07 06:27:23 【问题描述】:UNO API 支持inout
和out
参数——将变量传递给函数,函数修改变量,然后修改后的变量在函数外部可用。
javascript不支持这种类型的参数调用,所以自动化桥enables a workaround——传入一个数组;索引0
处的元素被修改,可以在函数外检索:
// for inout parameters
let inout = ['input value'];
obj.func(inout);
console.log(inout[0]); //could print 'new value'
对于inout
参数,由于需要初始值,因此可以使用元组类型声明函数:
declare interface Obj
func(inout: [string]): void;
但是,out
参数不需要初始值:
// Javascript
let out = [];
obj.func1(out);
console.log(out[0]); // could print 'new value'
AFAIK 无法表示空元组类型,空数组与元组类型不兼容。如果我用元组类型声明函数参数,我不能传入一个空数组:
// Typescript
declare interface Obj
func1(out: [string]): void;
let out = [];
obj.func1(out);
// Argument of type 'any[]' is not assignable to parameter of type '[string]'.
// Property '0' is missing in type 'any[]'.
link
我可以使用两种技巧:
要么使用any
颠覆类型系统:
let out: [string] = [] as any;
或使用初始化数组:
let out: [string] = [''];
有没有更“hacky”的方法来做到这一点?
【问题讨论】:
【参考方案1】:您可以将inout
参数声明为inout: string[]
,这样您就可以传递一个空数组。
例如:
declare interface Obj
func(inout: string[]): void;
;
const Obj: Obj =
func(inout: string[])
// ...
let arr = [];
Obj.func(arr);
【讨论】:
【参考方案2】:Until TypeScript allows empty tuples,可以考虑将参数类型声明为undefined[]
。
【讨论】:
不会使用undefined[]
导致有关各个成员的所有类型信息丢失吗?
此外,即使允许空元组,我也必须在调用非空元组类型后显式转换它。以上是关于在定义中表示 UNO 输出参数的主要内容,如果未能解决你的问题,请参考以下文章
在 Apiary 中表示输入参数是日期/时间的正确格式是啥?
可以用Arduino Uno具有PWM输出功能的引脚控制无源蜂鸣器的音调吗?