我正在处理一个有大量 JSDoc 注释的项目,我想开始利用 tsc
和 JSDoc style annotations。
给定一个向对象添加属性的函数,如下所示:
/**
* @param {object} obj
* @param {string} n
* @return void
*/
function addName(obj, n) {
obj.name = n;
}
let thing = {size: "medium"};
addName(thing, "product");
console.log(thing.name);
有没有办法声明对象将使用附加属性进行变异?
答案 0 :(得分:0)
这种方法是否满足您真实案例的需要?它表面上解决了您描述的问题,但也许您无法更改任何签名以采用这种更“不可变”的模式。
ilGenerator.Emit(
OpCodes.Callvirt,
TypeBuilder.GetMethod(
typeof(Func<>).MakeGenericType(genParam),
typeof(Func<>).GetMethod("Invoke")
));
答案 1 :(得分:0)
再往下走,鉴于 addName
的当前签名返回 void,您可以使其始终返回 boolean 并将其转换为类型谓词。然后任何由赋值的布尔返回值保护的东西都会用额外的已知参数正确输入
function addName(obj:object, n:string) : obj is typeof obj & {name:string}{
(obj as any).name = n;
return true
}
let thing = {size: "medium"};
if(addName(thing, "product")){
console.log(thing.name);
}