函数重载,函数有/无入参时返回值约束
interface Config {
name?: String;
age?: Number;
}
const config: Config = {};
function getConfig(): Config;
function getConfig<k extends keyof Config>(key: k): Config[k];
function getConfig<k extends keyof Config>(key?: k) {
return key ? config[key] : config;
}
config.name = 'foo';
config.age = 18;
getConfig();
getConfig('name');