我發現這段代碼,我不完全理解。準確地說,我正在談論這些函數參數:奇怪的函數參數
function defaultPort({ port=123, user='test' }: Object = {}) {
}
我認爲這是一種不同類型的解構,但顯然它不是。另外,我無法在Node中運行此代碼,所以我想它需要某種模塊才能正確使用它。
有沒有人見過這個?
我發現這段代碼,我不完全理解。準確地說,我正在談論這些函數參數:奇怪的函數參數
function defaultPort({ port=123, user='test' }: Object = {}) {
}
我認爲這是一種不同類型的解構,但顯然它不是。另外,我無法在Node中運行此代碼,所以我想它需要某種模塊才能正確使用它。
有沒有人見過這個?
正如TJ所述,: Object
部分是TypeScript或Flow。
準確地說,我說的這些功能參數:
我相信你是在談論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
這打字稿正常的,但因爲它在編譯時產生一個錯誤,這是確實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
改變它any
,它會工作得很好:
function defaultPort({ port=123, user='test' }: any = {}) { // no error
}
雖然它可能會是最好只申報類型:
type Param = {
port?: number;
user?: string;
}
function defaultPort({ port=123, user='test' }: Param = {}) {
}
對於它的價值:這不是(香草)的JavaScript。 – Cerbrus
它是TypeScript,你需要用'tsc'把它變成JS。 – jonrsharpe
*部分*與現代JavaScript相似,但末尾的':Object = {}'如果引用正確,則不是。 –