采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
请教老师和同学们:
location: 课程2-12《复杂函数类型补充学习》中的重载写法 question: 只是简单将64行return (str+strx).length修改为65行return 0, TS检查器就飙红了。
return (str+strx).length
return 0
不是很清楚哪里写的不对,请教大家!
是的 重载函数的返回值应该保持一致, 代码改为如下即可:
//申明函数重载 function getString(str: unknown): number; function getString(str: unknown, str2: string): number; //实现函数 function getString(str1: unknown, str2?: string) { if(typeof str1 === 'string') { return 0; } return 1; } console.log(`getString value = ${JSON.stringify(getString(1))}`);
这个和Java 的重载感觉差不多
刚才看了视频中重载函数的使用例子,感觉是不是如果自己写Demo可能还行,如果在项目中一般不会在一个方法中有调用返回string 有调用返回number 的两个不同函数定义, 这样一般会是的代码逻辑不够清晰, 要不然实现两个不同的函数内容, 个人意见供参考:
//函数重载 function getStringValue(str: string): string; function getStringValue(str1: string, str2: string): number; function getStringValue(str1: string, str2?: string) { if (typeof str1 === 'string' && str2) { return (str1 + str2).length; //TS调用第二函数定义 } return str1; //TS 调用第一个函数定义 } console.log(`The value is called - ${getStringValue('123', 'werwer')}`);
你仔细看下你的函数定义, 一个是返回参数是string,一个是number, 而你调用的函数时返回string 但是你的if 条件句判断return 0 是number, 你转成string 因该就没问题了,
你的这段代码我有两个疑问:
getstring 为什么重载地二函数返回是number?
真正逻辑的函数为什么为什么没有返回值?
其实对于多个参数代码也可以这么写,, 供参考:
//返回仅为字符串的数据类型,函数可以写成泛型话, 此处体会<初学者和最强辅助OpenAI(chatGPT> //给出的两个版本,自己也在学习中 //优化前(自己最初的写法) // const getStringResult = <T>(...args : unknown[]): T[] => { // const filterString: T[] = []; // args.filter(arg => { // if (typeof arg === 'string') { // filterString.push(arg as T); // } // }); // return filterString; // } //优化后(Open AI -> ChatGPT 给出的优化方案如下) const getStringResult = <T>(...args : unknown[]): T[] => { return args.filter((arg :unknown) => typeof arg === 'string') as T[]; } const inputValue_1 : unknown = 'aa4'; const inputValue_2 : unknown = undefined; const inputValue_3 : unknown = true; const inputValue_4 : unknown = 2; console.log(`getStringResult value = ${JSON.stringify(getStringResult<string>(inputValue_1, inputValue_2, inputValue_3, inputValue_4))}`);
首先,感谢慕圣9599806你的回复。 上面已标明是课程代码,所以需求层面的东西就不多说了 问题的核心是:在实现签名中,TS应当可以推断出是哪一个重载签名了,此处不应该报错有些不理解。 我目前的解决办法是:给实现签名指定联合类型的返回值
登录后可查看更多问答,登录/注册
Dell老师专为TypeScript小白打造的,全栈式教学TS入门课程
2.1k 13
1.4k 12
1.0k 11
1.1k 10
1.0k 8