1. {// 原始数据类型
    2. let num: number = 1
    3. let str: string = 'abc'
    4. let bool: boolean = true
    5. let u: undefined = undefined
    6. let n: null = null
    7. // 任意值: 可以赋值给任意类型
    8. let any: any = 1
    9. // 联合类型: 表示取值可以为多种类型中的一种
    10. let num1: number | string = 1
    11. // -- 如果联合类型的属性不是共有的,则不能访问到,会报错
    12. function fn(num2: number | string) {
    13. console.log(num2.length); // 因为number不会存在length属性,所以会报错
    14. }
    15. fn('abc')
    16. }
    17. {// 数组类型
    18. let arr: number[] = [1, 2, 3]
    19. let arr1: string[] = ['a', 'b', 'c']
    20. let arr3: (number | string)[] = [1, 'a', 2]
    21. let arr4: any[] = [1, 'a', 2, false, 'age', { name: '小红' }]
    22. }
    23. {// 对象类型: 使用接口来定义对象
    24. // -- 必须保持一致
    25. {
    26. interface IPerson {
    27. name: string,
    28. age: number,
    29. }
    30. let student: IPerson = {
    31. name: '小红',
    32. age: 20,
    33. }
    34. }
    35. // -- 可以不一致,可选形: age可选可不选,仍不可多添加
    36. {
    37. interface IPerson {
    38. name: string,
    39. age?: number,
    40. }
    41. let student: IPerson = {
    42. name: '小红',
    43. }
    44. let student2: IPerson = {
    45. name: '小红',
    46. age: 20,
    47. }
    48. }
    49. // 使用任意属性定义对象
    50. // 可选类型和默认类型都必须是propName的子类,否则报错
    51. {
    52. interface IPerson {
    53. name: string,
    54. age: number
    55. [propName: string]: any
    56. }
    57. let student: IPerson = {
    58. name: 'xiaowang',
    59. age: 20,
    60. school: '北京大学',
    61. heigt: '170cm'
    62. }
    63. }
    64. }
    65. {// 函数类型:函数的参数和返回值
    66. {//普通函数的ts写法
    67. // 普通函数
    68. function sum(x: number, y: number): number {
    69. return x + y;
    70. }
    71. sum(10, 20)
    72. // 箭头函数和函数表达式
    73. let sum1 = (a: number, b: number): number => a + b
    74. sum1(10, 20)
    75. let sum2 = function (a: string, b: number) {
    76. console.log(a.length, b.toString());
    77. }
    78. sum2('abc', 123)
    79. }
    80. {// 利用接口写函数,只支持箭头函数和函数表达式
    81. interface addFn { (num1: number, num2: number): number }
    82. let add: addFn = (num1, num2) => num1 + num2
    83. add(10, 20)
    84. }
    85. {// 函数的可选参
    86. function buildName(str1: string, str2?: string): void {
    87. console.log(str1.length);
    88. }
    89. buildName('abcd')
    90. buildName('abcd', 'cdef')
    91. }
    92. {// 函数参数的默认值
    93. function sum1(a: number = 10, b: number): number {
    94. return a + b
    95. }
    96. sum(10, 20)
    97. }
    98. }
    99. {// 类型断言: 语法: 值 as 类型
    100. // 当ts确定不了某个值的时候,这个时候就可以用到类型断言
    101. function sumFn(a: number | string) {
    102. console.log((a as string).length);
    103. }
    104. sumFn('abc')
    105. }
    106. {// 内置对象
    107. let div: HTMLDivElement = document.querySelector('.box') as HTMLDivElement
    108. // 等等......Boolean、Error、Date、RegExp 等
    109. }
    110. {// 泛型:在调用的时候使用来去定义类型
    111. interface ILength {
    112. length: number
    113. } // 泛型的类型约束
    114. function str<T extends ILength>(str: T) {
    115. console.log(str.length);
    116. }
    117. str<string>('abc')
    118. }