为什么在 TypeScript 中对 'any' 字段类型变量使用 'string' 函数时没有编译时错误?
Why there is no compile time error when 'string' functions are used on an 'any' field type variable in TypeScript?
我有以下打字稿代码:
let a;
a = "number";
let t = a.endsWith('r');
console.log(t);
由于 a 没有声明类型,编译器将其推断为 'any' 类型。现在,当我们为其分配字符串值并尝试针对该值使用 'endsWith' 函数时,为什么编译器不给出编译错误,因为 'endsWith' 不是 'any' 类型的有效函数。我观察到它可以很好地编译/转译成 Js 并成功执行。
我知道编写代码的正确方法是:
let a : string;
a = "number";
let t = a.endsWith('r');
console.log(t);
但是为什么它在前面提到的代码块中编译得很好?
Any
选择退出类型系统,因此即使 a
实际上是另一种类型,您也不会收到 a.endsWith()
的编译错误。参见 https://www.typescriptlang.org/docs/handbook/basic-types.html#any
Any 数据类型类似于 C# 中的 dynamic 类型,它在 运行 时间检查点后分配的方法只要。所以在编译时——阅读编码,你可以给它赋值任何东西,它就会通过编译。只有在 运行 时间,它会检查附加的方法是否真正可用,如果不是它会给出 运行 时间错误。
任意类型表示类型将在运行时决定。它包含的哪种类型的数据将是变量的类型。
示例:
let someVariable: any ;
somVariable = 1000;
somVariable 的 类型将在 运行 时被读取为数字。
somVariable = "string";
如果 somVariable 包含一个字符串,该类型将在 运行 时被读取为字符串。
类型不匹配错误将在运行时产生,因为类型是在任何的运行时决定的。 .
我有以下打字稿代码:
let a;
a = "number";
let t = a.endsWith('r');
console.log(t);
由于 a 没有声明类型,编译器将其推断为 'any' 类型。现在,当我们为其分配字符串值并尝试针对该值使用 'endsWith' 函数时,为什么编译器不给出编译错误,因为 'endsWith' 不是 'any' 类型的有效函数。我观察到它可以很好地编译/转译成 Js 并成功执行。 我知道编写代码的正确方法是:
let a : string;
a = "number";
let t = a.endsWith('r');
console.log(t);
但是为什么它在前面提到的代码块中编译得很好?
Any
选择退出类型系统,因此即使 a
实际上是另一种类型,您也不会收到 a.endsWith()
的编译错误。参见 https://www.typescriptlang.org/docs/handbook/basic-types.html#any
Any 数据类型类似于 C# 中的 dynamic 类型,它在 运行 时间检查点后分配的方法只要。所以在编译时——阅读编码,你可以给它赋值任何东西,它就会通过编译。只有在 运行 时间,它会检查附加的方法是否真正可用,如果不是它会给出 运行 时间错误。
任意类型表示类型将在运行时决定。它包含的哪种类型的数据将是变量的类型。 示例:
let someVariable: any ;
somVariable = 1000;
somVariable 的 类型将在 运行 时被读取为数字。
somVariable = "string";
如果 somVariable 包含一个字符串,该类型将在 运行 时被读取为字符串。
类型不匹配错误将在运行时产生,因为类型是在任何的运行时决定的。 .