在 TypeScript 中,"返回实际类型"通常指的是在运行时获取变量的具体类型信息,或者在编译时精确地描述函数的返回类型。TypeScript 是静态类型系统,大多数类型信息在编译后会丢失,但我们可以通过一些方式来实现类型检查和运行时类型推断。
function add(a: number, b: number): number {
return a + b;
}
TypeScript 可以自动推断返回类型:
function greet(name: string) {
return `Hello, ${name}`; // 推断返回类型为 string
}
interface User {
id: number;
name: string;
}
function getUser(id: number): User | null {
// ...
}
function identity<T>(arg: T): T {
return arg;
}
虽然 TypeScript 类型在运行时不可用,但可以通过一些模式实现:
function isUser(obj: any): obj is User {
return obj && typeof obj.id === 'number' && typeof obj.name === 'string';
}
function getUserData(): unknown {
// 从API获取数据
}
const data = getUserData();
if (isUser(data)) {
// 在此块中,data的类型被缩小为User
console.log(data.name);
}
错误示例:
function getLength(str: string): number {
return str.length.toString(); // 错误:返回string而不是number
}
解决方案:
function getLength(str: string): number {
return str.length; // 正确返回number
}
错误处理:
async function fetchData(): any { // 不推荐使用any
const response = await fetch('...');
return response.json();
}
正确方式:
interface ApiResponse {
// 定义响应结构
}
async function fetchData(): Promise<ApiResponse> {
const response = await fetch('...');
return response.json() as Promise<ApiResponse>;
}
function parseInput(input: string): number | string {
const num = parseFloat(input);
return isNaN(num) ? input : num;
}
const result = parseInput("123");
if (typeof result === 'number') {
// 处理数字
} else {
// 处理字符串
}
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
function getReturnType<T extends (...args: any[]) => any>(fn: T): ReturnType<T> {
return fn();
}
function getValue(key: string): string;
function getValue(key: string, asNumber: true): number;
function getValue(key: string, asNumber?: boolean): string | number {
const value = localStorage.getItem(key) || '';
return asNumber ? parseFloat(value) : value;
}
unknown
代替any
作为不确定类型的返回值通过合理使用TypeScript的返回类型特性,可以显著提高代码的可靠性和可维护性。
没有搜到相关的文章