Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在惯用的Typescript中,我应该始终声明一个变量';s类型,还是应该更多地依赖类型推断?_Typescript_Idioms - Fatal编程技术网

在惯用的Typescript中,我应该始终声明一个变量';s类型,还是应该更多地依赖类型推断?

在惯用的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

起初,我们的团队发现自己编写了很多这样的代码,因为这是我们在ActionScript等语言中所习惯的

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
标志,只声明您必须声明的类型。方法的返回类型也值得显式使用,因为这提高了可读性。在较大的文件中,声明较少的情况下,分析永远不会完成。