// 聲明一個 number 的特殊類型,限制參數
type numberType = 0 | 1 | 2;
function test(a:numberType = 1){
console.log(a)
}
test();
// 1
test(2);
// 2
複製代碼
function test(a?: numberType):number; function test(a = 1):number | void {
console.log(a)
}
test();
// 1
test(2)
// 2
複製代碼
JavaScript 模擬實現css
function test(){
if(arguments.length==0){
console.log(a)("alert!");
}
else if(arguments.length==1){
console.log(a)(arguments[0])
}
}
test();
// alert!
test(2);
// 2
複製代碼
爲何我會獲得 Supplied parameters do not match any signature 的錯誤?(因爲 JavaScript 沒有函數重載)html
函數實現簽名,它並非重載的一部分:git
function createLog(message: string): number; function createLog(source: string, message?: string): number {
return 0;
}
createLog('message'); // OK
createLog('source', 'message'); // ERROR: Supplied parameters do not match any signature
複製代碼
function createLog(message: string): number;
function createLog(source: string, message: string): number;
function createLog(source: string, message?: string): number {
return 0;
}
複製代碼
function isNumberType(type: number | numberType): type is numberType {
return (number as numberType) !== undedined;
}
function test(number = 1){
if(isNumberType(number)){
console.log(number)
}else{
// 咱們作更多的類型保護能夠在格式錯誤的時候手動作一些用戶提示的操做。
console.error('error number!')
}
}
test(1);
// 1
複製代碼
上面的類型保護的確看起來很臃腫,不過咱們能作更多的事情。具體的類型保護官網文檔講得很清楚,你們能夠再溫習一下。github