TypeScript 鐨?extends 鏉′欢绫诲瀷
鍦═ypeScript涓紝extends鍏抽敭瀛椾笉浠呭彲浠ョ敤浜庣被鐨勭户鎵匡紝杩樺彲浠ョ敤浜庢潯浠剁被鍨嬬殑瀹氫箟銆?/p>
鏉′欢绫诲瀷鏄竴绉嶅湪绫诲瀷绯荤粺涓繘琛屾潯浠跺垽鏂殑鏈哄埗銆傞€氳繃浣跨敤extends鍏抽敭瀛楋紝鎴戜滑鍙互鏍规嵁缁欏畾鐨勭被鍨嬫潯浠舵潵纭畾鏈€缁堢殑绫诲瀷銆傛潯浠剁被鍨嬬殑璇硶濡備笅锛?/p>
T extends U ? X : Y
鍏朵腑锛孴鏄緟鍒ゆ柇鐨勭被鍨嬶紝U鏄敤浜庡垽鏂殑绫诲瀷锛孹鍜孻鏄牴鎹垽鏂粨鏋滃垎鍒繑鍥炵殑绫诲瀷銆?/p>
涓嬮潰鏄竴涓畝鍗曠殑绀轰緥锛?/p>
type TypeName<T> =
T extends string ? "string" :
T extends number ? "number" :
T extends boolean ? "boolean" :
T extends undefined ? "undefined" :
T extends Function ? "function" :
"object";
type T1 = TypeName<string>; // "string"
type T2 = TypeName<"hello">; // "string"
type T3 = TypeName<123>; // "number"
type T4 = TypeName<true>; // "boolean"
type T5 = TypeName<undefined>; // "undefined"
type T6 = TypeName<() => void>; // "function"
type T7 = TypeName<object>; // "object"
type T8 = TypeName<number[]>; // "object"
鍦ㄤ笂闈㈢殑绀轰緥涓紝鎴戜滑瀹氫箟浜嗕竴涓潯浠剁被鍨婽ypeName锛屽畠鏍规嵁缁欏畾鐨勭被鍨婽鍒ゆ柇鍏剁被鍨嬪悕绉帮紝骞惰繑鍥炵浉搴旂殑瀛楃涓茬被鍨嬨€傛牴鎹被鍨嬬殑涓嶅悓锛岃繑鍥炵殑缁撴灉浼氬垎鍒槸"string"銆佲€渘umber鈥濄€佲€渂oolean鈥濄€佲€渦ndefined鈥濄€佲€渇unction"鍜?quot;object鈥濄€?/p>
閫氳繃浣跨敤extends鍏抽敭瀛楋紝鎴戜滑鍙互鏍规嵁涓嶅悓鐨勭被鍨嬫潯浠舵潵纭畾鏈€缁堢殑杩斿洖绫诲瀷銆傚鏋淭鏄痵tring绫诲瀷锛岄偅涔堟渶缁堢殑杩斿洖绫诲瀷灏辨槸"string"锛涘鏋淭鏄痭umber绫诲瀷锛岄偅涔堟渶缁堢殑杩斿洖绫诲瀷灏辨槸"number"锛屼互姝ょ被鎺ㄣ€傚浜庢棤娉曞尮閰嶇殑绫诲瀷锛屾渶缁堢殑杩斿洖绫诲瀷灏辨槸"object"銆?/p>
闇€瑕佹敞鎰忕殑鏄紝extends鍏抽敭瀛楀湪鏉′欢绫诲瀷涓殑浣跨敤绫讳技浜嶫avaScript涓殑涓夊厓鏉′欢杩愮畻绗︺€?/p>