本文目录:
- 1、typescript值类型和引用类型的区别
- 2、typescript和js的区别是什么?
- 3、TypeScript 类型挑战 Easy
- 4、TypeScript 类型Never 和 类型断言
- 5、typescript引入any类型的原因
typescript值类型和引用类型的区别
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Person
{
public int Blood = 10;
}
class Program
{
public static void Add(int x)
{
x += 10;
Console.WriteLine(“值类型当参数被传递并修改之后:”+x);
}
public static void Add(Person person)
{
person.Blood += 10;
Console.WriteLine(“引用类型当参数被传递并修改之后:” + person.Blood);
}
static void Main(string[] args)
{
//值类型变量
int i = 10;
Console.WriteLine(“i的原值:” + i);
Add(i);
Console.WriteLine(“但是i的值并没有因为函数的修改而修改:” + i);
//引用类型变量
Person person = new Person();
Console.WriteLine(“Blood的原值:” + person.Blood);
Add(person);
Console.WriteLine(“但是Blood的值因为函数的修改而修改:” + person.Blood);
//值类型和引用类型的区别,就在于当函数参数传递的时候.
//值类型是把自己的值复制一份传递给别的函数操作.无论复制的值怎么被改变.其自身的值是不会改变的
//而引用类型是把自己的内存地址传递给别的函数操作.操作的就是引用类型值的本身.所以值被函数改变了.
//这就是传值和传址的区别
Console.ReadLine();
}
}
}
typescript和js的区别是什么?
typescript和js的区别如下:
一:产生背景不同
1、TypeScript起源于使用JavaScript开发的大型项目。由于JavaScript语言本身的局限性,难以胜任和维护大型项目开发。因此微软开发了TypeScript,使得其能够胜任开发大型项目。
2、JavaScript在1995年由Netscape公司的BrendanEich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。
二:功能不同
1、TypeScript是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。
2、JavaScript是一种基于对象的语言,可以创建对象同时使用现有对象。但是Javascript并不支持其它面向对象语言所具有的继承和重载功能。
三:局限性不同
1、TypeScript扩展了JavaScript的语法,所以任何现有的JavaScript程序可以运行在TypeScript环境中。TypeScript是为大型应用的开发而设计,并且可以编译为JavaScript。
TypeScript支持为已存在的JavaScript库添加类型信息的头文件,扩展了它对于流行库的支持,如jQuery,MongoDB,Node.js和D3.js等。
2、由于JavaScript语言发展的较早,也较为成熟,所以仍有一大批开发人员坚持使用他们熟悉的脚本语言JavaScript,而不是学习TypeScript。
TypeScript代码需要被编译(输出JavaScript代码),这是TypeScript代码执行时的一个额外的步骤。
TypeScript 类型挑战 Easy
学习 TypeScript 类型
你可以去源码仓库去在线实操一下. 更容易掌握. 更多的类型技术需要更长的时间进行积累. 下面我们开始吧.
Note:
Easy , union , built-in
实现 TS 内置的 PickT, K ,但不可以使用它。
从类型 T 中选择出属性 K,构造成一个新的类型。
答案
Easy , union , built-in
不要使用内置的 ReadonlyT ,自己实现一个。
该 Readonly 会接收一个 泛型参数,并返回一个完全一样的类型,只是所有属性都会被 readonly 所修饰。
也就是不可以再对该对象的属性赋值。
答案
Easy
传入一个元组类型,将这个元组类型转换为对象类型,这个对象类型的键/值都是从元组中遍历出来。
答案
Easy , array
实现一个通用 FirstT ,它接受一个数组 T 并返回它的第一个元素的类型。
答案
创建一个通用的 Length ,接受一个 readonly 的数组,返回这个数组的长度。
答案
Easy , built-in
实现内置的 Exclude T, U 类型,但不能直接使用它本身。
答案
Easy , promise , built-in
假如我们有一个 Promise 对象,这个 Promise 对象会返回一个类型。在 TS 中,我们用 Promise 中的 T 来描述这个 Promise 返回的类型。请你实现一个类型,可以获取这个类型。
答案
Easy , utils
实现一个 IF 类型,它接收一个条件类型 C ,一个判断为真时的返回类型 T ,以及一个判断为假时的返回类型 F 。 C 只能是 true 或者 false, T 和 F 可以是任意类型。
答案
Easy , array
在类型系统里实现 JavaScript 内置的 Array.concat 方法,这个类型接受两个参数,返回的新数组类型应该按照输入参数从左到右的顺序合并为一个新的数组。
答案
Easy , array
在类型系统里实现 JavaScript 的 Array.includes 方法,这个类型接受两个参数,返回的类型要么是 true 要么是 false。
答案
Easy , array
在类型系统里实现通用的 Array.push
Easy , array
在类型系统里实现通用的 Array.unshift
Easy , infer , tuple , built-in
实现内置的 Parameters 类型
TypeScript 类型Never 和 类型断言
never 类型表示的是那些永不存在的值的类型。 例如, never 类型是那些总是会抛出异常或 根本就不会有返回值的函数表达式或箭头函数表达式 的返回值类型; 变量也可能是 never 类型,当它们被永不为真的类型保护所约束时。
never 类型是任何类型的子类型,也可以赋值给任何类型 ;然而,没有类型是 never 的子类型或可以赋值给 never 类型(除了 never 本身之外)。 即使 any 也不可以赋值给 never 。
下面是一些返回never类型的函数:
类型断言好比其它语言里的类型转换
类型断言有两种形式。 其一是“尖括号”语法:
另一个为as语法:
typescript引入any类型的原因
typescript引入any类型的原因是any的变量可以赋予任意类型的值。any表示的是任意类型即可以代表任意一个类型,之所以将any称为顶层类型,是因为他包含了Javascript中的所有类型的值,可以理解any为所有类型的总称是一个包含了所有类型的超集。
引入any类型的特点
使用TS时不建议使用any类型,这就要从Typescript的类型安全检测说起,在上一节曾经强调过,之所以引入类型,是因为我们需要TS帮助我们去检测声明的类型,或者说使用TS有类型安全这一好处。
使用了any类型,Typescript编译器就不会清楚哪些操作是被允许,哪些操作是被禁止的,就失去了Typescript提供的类型安全方面的好处,就与直接用JavaScript没有什么区别,失去了使用Typescript的意义。
本文来源:https://www.yuntue.com/post/118956.html | 云服务器网,转载请注明出处!

微信扫一扫打赏
支付宝扫一扫打赏