any任意值类型
可以赋值其他任意类型:
ts:
// 任意值 ==》任意类型
let myName :any = 'zjq';
myName=123;
myName=false;
myName=()=>'我是函数返回值';
js: 箭头函数也变成了es5的形式:
// 任意值 ==》任意类型
var myName = 'zjq';
myName = 123;
myName = false;
myName = function () { return '我是函数返回值'; };
不写类型也会默认给任意类型,也同样可以转成js
let myName ;
myName = 123;
myName = false;
myName = () => '我是函数返回值';
然而有个问题,当我们使用这样的时候就会报错:
// 任意值 ==》任意类型
let myName ='qwe';
myName = 123;
myName = false;
myName = () => '我是函数返回值';
这源于类型推论。
类型推论
如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。
这是因为上面的
// 任意值 ==》任意类型
let myName ='qwe';
myName = 123;
myName = false;
myName = () => '我是函数返回值';
类型推论等价于
// 任意值 ==》任意类型
let myName :string ='qwe';
myName = 123;
myName = false;
myName = () => '我是函数返回值';
后面的赋值不是string了,所以会报错;但是我们:
let myName ;
myName = 123;
myName = false;
myName = () => '我是函数返回值';
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查
这样就不会报错:因为在ts中类型推论给给一个any任意值类型;类型推论等价于
let myName:any ;
myName = 123;
myName = false;
myName = () => '我是函数返回值';
参考:https://www.bookstack.cn/read/typescript-tutorial-202005/basics-type-inference.md