可选参数

函数可选参数 加?,只能写在必填参数的后面

  1. function buildName(firstName: string, lastName?: string): string {
  2. return firstName + lastName;
  3. }

默认参数

  1. function buildName(firstName: string, lastName: string = '翠花'): string {
  2. return firstName + lastName;
  3. }

编译后:

  1. function buildName(firstName, lastName) {
  2. if (lastName === void 0) {
  3. lastName = '翠花';
  4. }
  5. return firstName + lastName;
  6. }

剩余参数

  1. // 剩余参数:编译后其实是用了arguments
  2. function buildName3(firstName: string, ...resOfName: string[]): string {
  3. let name = '';
  4. resOfName.forEach((item) => {
  5. name += item;
  6. });
  7. return firstName + name;
  8. }
  9. console.log(buildName3('1', '2', '多少都可以'));

编译后其实是用了 arguments

  1. // 编译后:
  2. function buildName3(firstName) {
  3. var resOfName = [];
  4. for (var _i = 1; _i < arguments.length; _i++) {
  5. resOfName[_i - 1] = arguments[_i];
  6. }
  7. var name = '';
  8. resOfName.forEach(function (item) {
  9. name += item;
  10. });
  11. return firstName + name;
  12. }
  13. console.log(buildName3('1', '2', '多少都可以'));

this

this :函数被调用的上下文,箭头函数的 this 指向声明位置的上下文

  1. interface Card {
  2. suit: string;
  3. card: number;
  4. }
  5. interface Deck {
  6. suits: string[];
  7. cards: number[];
  8. // 指定this类型,如果哪里有写错this的引用,会智能提示
  9. createCardPicker(this: Deck): () => Card;
  10. }
  11. let deck: Deck = {
  12. suits: ['黑桃', '红桃', '梅花', '尖尖'],
  13. cards: Array(52),
  14. createCardPicker: function () {
  15. // 箭头函数,this指向函数声明时的this
  16. return () => {
  17. let pickedCard = Math.floor(Math.random() * 52);
  18. let pickedSuit = Math.floor(pickedCard / 13);
  19. return {
  20. suit: this.suits[pickedSuit],
  21. card: pickedCard % 13,
  22. };
  23. };
  24. },
  25. };

重载

函数的参数类型、个数不同,匹配对应的签名

  1. function run(x: number): number;
  2. function run(x: string, y: string): string;
  3. function run(x: number | string, y?: string) {
  4. if (typeof x === 'number') {
  5. return x;
  6. } else if (typeof y === 'string') {
  7. return y;
  8. }
  9. }