1. 概念预览
- 基础类型:
布尔值
,数字
,字符串
,数组
,元组
,枚举
,any
,void
,null
,undefined
,never
,object
. - 类型断言: 有时候,我们比typescript本身更了解某些值的详细信息,我们可以通过断言去标注它,告知编译器,我知道我在干什么.但是,不会进行特殊的数据检查和解构.
- 变量声明:
let
与const
2. 代码展示
2.1 基本类型
- 布尔值
let isDone: boolean = false;
- 数字
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// [ˈbaɪnəri]
let binaryLiteral: nubmer = 0b1010;
let octalLiteral: number = 0o744;
- 字符串
let name: stirng = "bob";
name = "smith"
/* 模板字符串没定义多行文本和内嵌表达式,使用反引号, 换行相当于\n\n*/
- 数组
/* 单一元素类型 */
let list: number[] = [1,2,3];
/* 数组泛型 */
let list: Array<number> = [1,2,3];
- 元组
/*tuple*/
/* 元组类型允许表示一个一直元素数量和类型的数组 */
/* Declare [dɪˈkleə(r)] a tuple [tjuple] type */
let x: [string,number];
x = ["hello",10];
x = [10,"hello"];
/* 当访问一个越界元素的时候,会使用联合类型替代 */
x[3] = "world"; // ok,字符串可以复制给(string | number) 类型
- 枚举
/* enum 类型是对javaScript标准数据的一个补充,C#等其他语言一样枚举类型可以为一组数值赋予更友好的名字 */
/* 默认情况下从0开始为元素编号 */
enum Color {Red,Green,Blue}
let c: Color = Color.Green;
/* 我们将Red改成1将会从1开始编号 */
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
/* 全部改成手动赋值 */
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;
/* 我们知道值是2,但是不知道映射名字怎么办 */
enum Color {Red = 1, Green = 2, Blue = 4}
let colorName: string = Color[2]; // 'Green'
- any
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay,definely a boolean
let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)
let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.
// 当你知道一部分数据的类型时,any类型也是有用的。
let list: any[] = [1,true,"free"];
list[1] = 100
- void
// 从某种程度上来说, void类型像是与any相反,表示没有任何类型.
// 当一个函数没有返回值类型时使用 void
function warnUser(): void {
console.log("This is my warning message");
}
// 生命一个void类型的变量没有什么大用,因为你只能赋予它 undefined 和 null
let unusable: void = undefined;
- null
// Not much else we can assign to these variables!
let n: null = null;
- undefined
let u: undefined = undefined;
// void 和 (undefined | null) 有什么区别
// null 和undefined 是所有类的子类型.
// 就是说你可以把null 和undefined 复制给number类型的变量
// 然而,当你指定了--strictNullChecks标记,
// null 和 undefined 之鞥呢复制给 void 和它们各自.
// 这样就避免了很多常见问题.
// 也许在某处你想传入一个string 或 null 或 undefined,
// 你可以使用联合类型 string | null | undefined
// 我们管理尽可能使用 --strictNullChecks,在本手册里我们假设这个标记是关闭的.
- never
// never 类型表示的是那些永远不存在的值的类型.
// never类型是那些总是抛出异常或根本就不会返回值的函数表达式或箭头函数表达式的返回值类型;
// 变量也可能是never,当它们被永不为真的类型保护所约束时;
// 返回never的函数必须存在无法到达的终点
function error(message: string):never {
throw new Error(message);
}
// 推断的返回值类型为never
function fail() {
return error("Something failed");
}
// 返回never的函数必须存在无法到达的终点
function infiniteLoop():never {
while (true) {
}
}
- Object
object就是非原始类型,也就是除了number,string,boolean,symbol,null或undefined之外的类型 使用object类型,就可以更好的表示像Object.create这样的API.例如
declare function create(o:object| null):void;
create({prop:0}); // OK
create(null); // OK
create(42); // Error
create("string") // Error
create(false) // Error
create(undefined) // Erroir
2.2 类型推断
- 断言的形式有两种
/* 尖括号语法 */
let someValue: any = "this is a string";
let strLength:number = (<string>someValue).length;
/* as 语法 */
let someValue: any = "this is a string";
let strLength:number = (someValue as string).length;
2.3 变量声明
var a = 10;
// const是对let的一个增强,它能阻止对一个变量再次赋值
// 并且捕获变量怪异之处
function f(shouldInitialize: boolean) {
if (shouldInitialize) {
var x = 10;
}
return x;
}
f(true); // returns '10'
f(false); // returns 'undefined'
for (var i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 100 * i);
}
// 当然也可以用立即执行函数来解决
// let 变量它使用的是词法作用域和块作用域
// 块作用域边浪在包含它的块或for循环之外是不能访问的
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!