在惯用的Typescript中,我应该始终声明一个变量';s类型,还是应该更多地依赖类型推断?
起初,我们的团队发现自己编写了很多这样的代码,因为这是我们在ActionScript等语言中所习惯的在惯用的Typescript中,我应该始终声明一个变量';s类型,还是应该更多地依赖类型推断?,typescript,idioms,Typescript,Idioms,起初,我们的团队发现自己编写了很多这样的代码,因为这是我们在ActionScript等语言中所习惯的 var arrayOfFoo : Array<Foo> = new Array<Foo>(); //Then, sometime later: var someFoo : Foo = arrayOfFoo[0]; someFoo.someFooMethod(); var arrayOfFoo:Array=newarray(); //然后,过了一段时间: var some
var arrayOfFoo : Array<Foo> = new Array<Foo>();
//Then, sometime later:
var someFoo : Foo = arrayOfFoo[0];
someFoo.someFooMethod();
var arrayOfFoo:Array=newarray();
//然后,过了一段时间:
var someFoo:Foo=arrayOfFoo[0];
someFoo.somefootemethod();
这很好,但是可以通过更加依赖Typescript的类型推断来简化:
//No need to declare the type ": Array<Foo>" here:
var arrayOfFoo = new Array<Foo>();
//Again, no need to declare that someFoo is a Foo
var someFoo = arrayOfFoo[0];
someFoo.someFooMethod();
//此处无需声明类型“:Array”:
var arrayOfFoo=新数组();
//同样,无需声明someFoo是Foo
var someFoo=arrayOfFoo[0];
someFoo.somefootemethod();
Typescript非常擅长类型推断。如果我从赋值的左侧删除该类型,编译器仍然知道该对象是什么类型,并且如果我尝试对推断类型无法执行的变量执行某些操作,编译器仍然会给出编译错误
我喜欢读的代码更少,输入的代码更少。声明类型的示例开始让我感到“多余”,但我担心我们以后可能会自找麻烦。如果社区有什么建议的话,我很好奇 我为我的项目所做的是,当类型定义可以推断时,我不会将它放在任何地方,因为(正如您已经说过的)它是多余的 我目前没有做的(但我真的很想做)是使用--noImplicitAny any标志编译 启用该标志后,将出现一个错误,无法推断出真正有用的类型!你可能想看看这个!请参见下面的示例 使用tsc--noImplicitAny tst.ts编译时,下面的代码将给出三个错误:
var arr = [];
var x = null;
var a: string[] = [];
var s = a["foo"]
ts(1,11):错误TS7015:数组文本隐式地具有来自扩展的“any”类型
ts.ts(2,5):错误TS7005:变量“x”隐式具有“any”类型
ts(5,11):错误TS7017:对象类型的索引签名隐式具有“any”类型
这样,当你做一些奇怪的事情时(意外地)会出现错误。Nice-这看起来非常有用,并且肯定会增加我更多依赖类型推断的信心。当我第一次尝试--noImplicitAny fag时,我甚至在使用的类型定义文件中也出现了一些错误。但仔细检查后,它们很容易修复,并且会生成更明确的代码。谢谢这是一种实用的方法-使用
noImplicitAny
标志,只声明您必须声明的类型。方法的返回类型也值得显式使用,因为这提高了可读性。在较大的文件中,声明较少的情况下,分析永远不会完成。