TypeScript 中物件引數的預設值
Shuvayan Ghosh Dastidar
2023年1月30日
- TypeScript 中物件的預設值
- 在 TypeScript 中通過解構傳遞預設值
- 在 TypeScript 中使物件的某些屬性具有預設值
-
在 TypeScript 中使用
Partial
關鍵字使所有欄位都具有預設值
預設引數是使用者希望始終合併到程式碼中的東西。TypeScript 具有在物件中提供預設引數和在函式中傳遞物件的功能。
本教程將重點介紹如何在 TypeScript 中使用預設引數。
TypeScript 中物件的預設值
如果沒有值傳遞給函式,則可以將函式定義為使用預設值。以下程式碼段演示瞭如何實現這一點。
interface Config {
file : string ;
test : boolean;
production : boolean;
dbUrl : string;
}
function getConfig ( config : Config = { file : 'test.log', test : true,
production : false, dbUrl : 'localhost:5432' }) {
console.log(config);
}
getConfig();
getConfig({file : 'prod.log', test: false, production : true, dbUrl : 'example.com/db'});
輸出:
{
"file": "test.log",
"test": true,
"production": false,
"dbUrl": "localhost:5432"
}
{
"file": "prod.log",
"test": false,
"production": true,
"dbUrl": "example.com/db"
}
上面顯示瞭如何在 TypeScript 中使用預設值。
如果在呼叫函式時沒有傳遞 Config
物件的值,getConfig
函式將使用函式定義中分配的預設值,這可以在第一次呼叫 getConfig
函式的情況下看到。
在對函式的第二次呼叫中,預設值被傳遞給函式的值覆蓋。
在 TypeScript 中通過解構傳遞預設值
TypeScript 還支援通過解構物件的屬性將預設值傳遞給函式。以下程式碼段顯示了它是如何實現的。
interface Person {
firstName : string ;
lastName : string ;
}
function getPerson( {firstName = 'Steve', lastName = 'Jobs' } : Person ) {
console.log( firstName + ' ' + lastName);
}
getPerson({} as Person);
getPerson({ firstName : 'Tim', lastName : 'Cook'});
輸出:
"Steve Jobs"
"Tim Cook"
因此,與前面的示例一樣,有兩次呼叫函式 getPerson
,一次使用預設值,另一次使用傳遞給函式的值。不同之處在於預設情況下,要傳遞一個空物件 {}
,否則 TypeScript 將丟擲錯誤 - Expected 1 arguments, but got 0
。
在 TypeScript 中使物件的某些屬性具有預設值
在為物件分配屬性或將物件傳遞給函式時,我們可以使物件的某些屬性具有預設值,而其他屬性是必需的。這可以通過使用 ?
來完成運算子。
以下程式碼段顯示了它是如何完成的。
interface Config {
file? : string ;
test? : boolean;
production : boolean;
dbUrl : string;
}
function getConfig( { file = 'api.log', test = true, production, dbUrl} : Config ) {
var config : Config = {
file,
test,
production,
dbUrl
};
console.log(config);
}
getConfig({production : true, dbUrl : 'example.com/db'});
輸出:
{
"file": "api.log",
"test": true,
"production": true,
"dbUrl": "example.com/db"
}
在 TypeScript 中使用 Partial
關鍵字使所有欄位都具有預設值
Partial
關鍵字是一個有用的工具,可以使物件的所有屬性成為可選的,並且可用於在函式定義的情況下使物件的所有欄位都具有預設值。使用上面的示例。
interface Config {
file : string ;
test : boolean;
production : boolean;
dbUrl : string;
}
function getConfig( { file = 'api.log', test = true, production = false, dbUrl = 'localhost:5432'} : Partial<Config> ) {
var config : Config = {
file,
test,
production,
dbUrl
};
console.log(config);
}
getConfig({production : true});
輸出:
{
"file": "api.log",
"test": true,
"production": true,
"dbUrl": "localhost:5432"
}
因此,在上面的示例中,我們可以看到所有欄位都有預設值,並且 production
屬性的值已被覆蓋。