2017-08-30 23 views
1

在JavaScript中,我写了很多的功能,如下列采取ES6的property shorthand的优势:简化的方法使用ES6的属性简写来传递带有打字稿的对象,并避免使用接口名称作为前缀参数?

function someFunction({param1, param2}) { 
    console.log(param1 + " " + param1); 
} 

//I call it like this: 
const param1 = "param1"; 
const param2 = "param2"; 
someFunction({param1, param2}); 

这里是我正在写在打字稿此功能:

function someFunction(arg: {param1: string, param2: string}) : string { 
    return arg.param1 + " " + arg.param2; 
} 

这工作正常,但是现在我需要在函数体中每次使用“arg”来引述我的参数,并且我需要每次给参数一个无用的(“arg”)名称。有没有办法在打字稿中做到这一点,我可以直接调用这些参数,而无需预先指定其接口名称?并避免每次命名一个接口?理想情况下,我想能够做到这一点:

function someFunction({param1: string, param2: string}) : string { 
    return param1 + " " + param2; 
} 

更清洁,更简单地编写和仍然给我所有我从打字稿想要的利益。有什么办法可以做到这一点?

+0

'函数someFunction({参数1,参数2}:{ param1:string,param2:string}):string {...}似乎是使用解构的方式。 – Bergi

回答

1

不,你试图做的是不可能的。从the specification

解构参数声明不允许对个人的结合模式类型的注释,因为这样的标注将会与对象文字冒号已经建立的意义相冲突。类型注释必须改写为顶层参数声明。

可以使用解构(有或没有简写语法)如下:

interface MyParameterObj { param1: string, param2: string } 

function someFunction({param1, param2}: MyParameterObj) : string { 
    return param1 + " " + param2; 
} 

而且内联接口:

function someFunction({param1, param2}: {param1: string, param2: string}) : string { 
    return param1 + " " + param2; 
} 
+0

有点重复,但它的工作原理。谢谢! – Ryan

相关问题