现在我们越来越多的项目正在使用Typescript并享受它的好处。为了更高效地使用它,我们可以遵循一些最佳实践,如下原则是我正在使用并推荐使用正确的类型声明(避免使用任何)类型声明是Typescript的一大优势,尤其是在代码编写中阶段,因为JavaScript在运行时定义了类型,而Typescript可以帮助你在运行之前,过滤掉大部分由类型引起的奇怪问题。当您知道您定义的变量的类型时,不要使用任何类型。建议每次定义新变量时都添加数据类型。名称:字符串=“你好”;值:数字=50;正确:布尔值=false;usestrictmodeusestrict是JavaScriptES5新增的特性,字面意思是:使用严格模式,可以在tsconfig文件配置中找到相关的。这可以防止你犯无意的或低级的错误,比如使用未声明的变量,没有使用类型注释,或者试图使用未来的保留关键字作为变量名等。usestrict帮助你通过以下方式编写良好和安全的编码习惯语法错误。使用let代替varvar是老朋友了,但是let和const在ES6中的出现解决了var的一些问题。var可以作用于全局作用域和局部作用域。当一个var类型的变量定义在一个函数/块之外时,它就成为一个全局作用域的变量,可以在脚本中的任何地方使用当var定义在一个函数内部时,它就成为局部作用域,它只能在该函数内部访问varname="JohnDoe";//全局作用域functiongetAge(){varage=30;//localscope}var关键字有几个缺陷:可以重复声明,不声明也可以调用,TS不会报错,会导致一些奇怪的问题。varname="JohnDoe";functiongetName(){varname="Anne";//不会报告错误}为避免这种情况,应改用let。let声明了一个块作用域的变量并且不能被重新声明。但是你可以在不同的作用域中声明相同的变量名,并且每个都被视为不同的变量。letname="John";if(true){letname="Anne";控制台日志(名称);//"安妮"}console.log(name);//"John"constantdeclaredconst和let是加在一起的变量声明。const也是块作用域类型,因此不能重新声明。这些是let和const之间的相似之处。区别在于const不能被重新赋值。所以当你声明一个常量时使用const。常量名称=“约翰”;名称=“安妮”;//错误constage=30;constage=31;//errorPS:声明const对象时,不能重新赋值,但可以修改其属性为固定长度数组使用元组类型letmarks:number[]=[1,2,3];你可以在marks数组中添加任意数量的元素,只要都是number类型即可,TS不会限制你。但是,在数组具有恒定长度的情况下,可能会导致严重的逻辑错误。为了避免这种错误,可以使用元组类型来限制数组的长度和每一项的数据类型letmarks:[number,number]=[1,2];//包含2个元素类型为number的数组类型marks=[10,20];//成功标记=[1];//syntaxerrormarks=[1,2,3,4,5]//syntaxerrorusingtypealiasassumingmultiplevariablesorobjectshavethesame数据结构类型letman:{name:string,age:number}={name="john",age=30};letwoman:{name:string,age:number}={name="Anne",age=32};为避免这种冗余类型定义,您可以使用类型别名typeDetails={name:string,age:number};//定义类型别名letman:Details={name="john",age=30};//使用类型别名letwoman:Details={name="Anne",age=32};额外的好处是代码可读性更强,看起来更清晰any和unknown从表面上看any和unknown没有区别。它们都是当我们无法确定数据类型时使用的帮助类型。如果我们想快速将js重构为ts,两者都可以使用,但也有一些区别。任何值都可以标记为any或unknownletanyExample:any;//定义一个任意类型letunknownExample:unknown;//定义一个未知类型anyExample=123;anyExample="嘿"unknownExample=false;未知示例=23.22;它做任何事情anyExample.you.made.this.code.chain();//successunknown不起作用,它是更安全的类型unknownExample.trim();//语法错误如果要使用未知类型,就得把他放在条件判断中在语句中if(typeofexampleUnkown=="string"){//第一步,检查类型exampleUnkown.trim();//不会报错}对类成员使用访问修饰符TS为类成员提供了访问修饰符,可以设置public、protected或private属性,但类始终是public类型private:只能在内部访问protected:内部或子类都可以访问public:两者都可以被访问classEmployee{protectedname:string;私人工资:数量;constructor(name:string,salary:number){this.name=name;this.salary=salary}publicgetSalary(){returnsalary}}如果要访问salary属性,必须调用getSalary方法classDeveloperextendsEmployee{viewDetails(){console.log(this.salary);//错误:属性'salary'是私有属性console.log(this.getSalary());//成功}}通过子类访问名称属性classDeveloperextendsEmployee{viewDetails(){console.log(this.name);}}每个人在使用Lint工具时都有自己的开发风格和习惯。在团队项目中,多种编码风格是灾难性的。如果不想污染代码库,还是要选择一款Lint工具,首选ESLint,它同时兼容JavaScript和Typescript格式化代码使用好的代码格式化器可以让你的编码更高效更简洁来自我的个人经验,我更喜欢在VSCode中使用Prettier。但是有很多代码格式化程序,选择取决于您使用的编辑器
