2016-09-05 113 views
0

我發現這段代碼,我不完全理解。準確地說,我正在談論這些函數參數:奇怪的函數參數

function defaultPort({ port=123, user='test' }: Object = {}) { 
} 

我認爲這是一種不同類型的解構,但顯然它不是。另外,我無法在Node中運行此代碼,所以我想它需要某種模塊才能正確使用它。

有沒有人見過這個?

+3

對於它的價值:這不是(香草)的JavaScript。 – Cerbrus

+3

它是TypeScript,你需要用'tsc'把它變成JS。 – jonrsharpe

+3

*部分*與現代JavaScript相似,但末尾的':Object = {}'如果引用正確,則不是。 –

回答

1

正如TJ所述,: Object部分是TypeScriptFlow

準確地說,我說的這些功能參數:

我相信你是在談論default parameters。它們允許您將默認值分配給函數的參數。

基本用法:

function sayHi (name = 'John') { 
    console.log('Hi ' + name) 
} 

sayHi('James') // Hi James 
sayHi() // Hi John 

當你解構一個對象,你也可以使用默認參數。

實施例:

function printInfo ({ name = 'John', age = 30 }) { 
    console.log('Name: ' + name) 
    console.log('Age: ' + age) 
} 

printInfo({ name: 'James', age: 10 }) // Name: James, Age: 10 
printInfo({ age: 20 }) // Name: John, Age: 20 
printInfo({ name: 'Michael' }) // Name: 'Michael', age: 30 
0

這打字稿正常的,但因爲它在編譯時產生一個錯誤,這是確實deconstructing,或更具體object destructuring使用default values它不是有效打字原稿。
,它不會編譯的原因是,該參數的類型爲Object它不會允許任何沒有被索引,例如:

let o: Object = { a: 5 }; 
console.log(o.a); // Error: Property 'a' does not exist on type 'Object' 
console.log(o["a"]); // this is fine 

code in playground

改變它any,它會工作得很好:

function defaultPort({ port=123, user='test' }: any = {}) { // no error 
} 

code in playground

雖然它可能會是最好只申報類型:

type Param = { 
    port?: number; 
    user?: string; 
} 

function defaultPort({ port=123, user='test' }: Param = {}) { 
} 

code in playground