TypeScript - Any 类型
any
类型是 TypeScript 中一种特殊的类型,它可以代表任何值。当你不确定变量的类 型或者变量的类型尚未定义时,可以使用 any
类型。any
类型在将 JavaScript 代码转换为 TypeScript 时特别有用。
任何值的占位符
声明为 any
类型的变量可以存储任何数据类型的值。
let x: any;
x = "Hello";
x = 23;
x = true;
这里,变量 x
被声明为 any
类型。这允许我们给变量分配任何值,如字符串、数字、布尔值等。
使用 typeof
操作符检查 any
类型变量的类型时,结果将是 undefined
。
let x: any;
console.log(typeof x); // undefined
编译后生成的 JavaScript 代码:
let x;
console.log(typeof x);
输出结果:
undefined
让我们通过以下 TypeScript 示例来理解 any
类型:
let x: any;
console.log(typeof x); // undefined
x = "Hello";
console.log(typeof x); // string
x = 23;
console.log(typeof x); // number
x = true;
console.log(typeof x); // boolean
在这个示例中,变量 x
被声明为 any
类型。然后我们给它分配了不同类型的值(字符串、数字和布尔值)。
编译后生成的 JavaScript 代码:
let x;
console.log(typeof x);
x = "Hello";
console.log(typeof x);
x = 23;
console.log(typeof x);
x = true;
console.log(typeof x);
输出结果:
undefined
string
number
boolean
任何类型的函数参数
你也可以定义一个函数,使其参数为 any
类型。
function func(para: any) {
}
这里,函数 func
可以接受任何类型的参数(数字、字符串、布尔值等)。
让我们来看一个示例:
function greet(name: any): string {
return `Hello Mr. ${name}`;
}
console.log(greet('Shahid'));
console.log(greet(123));
函数 greet
被定义为接受 any
类型的参数。因此,它可以接受任何类型的参数(数字、字符串等)。
我们调用了 greet
函数,传递了两个不同类型的值(字符串和数字)。你可以注意到,它对这两种类型的参数都有效。
编译后生成的 JavaScript 代码:
function greet(name) {
return `Hello Mr. ${name}`;
}
console.log(greet('Shahid'));
console.log(greet(123));
输出结果:
Hello Mr. Shahid
Hello Mr. 123
任何类型的对象
你也可以定义一个 any
类型的对象。这样的对象可以具有任何类型的属性。
const student: any = {
name: "John Doe",
age: 32,
isEnrolled: true,
};
这里,student
对象被声明为 any
类型。它包含三个不同类型的属性。
尝试以下示例:
const student: any = {
name: "John Doe",
age: 32,
isEnrolled: true,
};
console.log(student.name);
console.log(student.age);
console.log(student.isEnrolled);
编译后生成的 JavaScript 代码:
const student = {
name: "John Doe",
age: 32,
isEnrolled: true,
};
console.log(student.name);
console.log(student.age);
console.log(student.isEnrolled);
输出结果:
John Doe
32
true
为什么使用 any
类型?
使用 any
类型的一个原因是当你处理未进行类型检查的代码时。例如,如果你正在使用现有的 JavaScript 代码,any
类型在将 JavaScript 代码转换为 TypeScript 时非常有用。如果你正在使用一个不是用 TypeScript 编写的第三方库,你可能需要在 TypeScript 代码中为变量使用 any
类型。
另一个使用 any
类型的原因是当你不确定值的类型时。例如,一个接受用户输入的函数可以被定义为 any
类型,以处理用户提供的任何类型的数据。
在新的 TypeScript 代码中不鼓励使用 any
类型。建议在使用 any
类型时要小心。如果你过于频繁地使用 any
类型,你的代码将变得不那么类型安全。
类型断言
使用类型断言来缩小 any
变量的类型。
let value: any = "hello world";
let lenStr: number = (value as string).length;
console.log(lenStr);