xcatliu/typescript-tutorial

一些建议

linjialiang opened this issue · 3 comments

用接口定义函数的形状

我们也可以使用接口的方式来定义一个函数需要符合的形状:

interface SearchFunc {
    (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function (source: string, subString: string) {
    return source.search(subString) !== -1;
};
  • 建议:定义了接口的函数,是否应该省略类型定义,ts 已经可以自动推导

    interface SearchFunc {
        (source: string, subString: string): boolean;
    }
    
    let mySearch: SearchFunc;
    - mySearch = function (source: string, subString: string) {
    + mySearch = function (source, subString) {
        return source.search(subString) !== -1;
    };

箭头函数可选参数

const xjjInfo: (name: string, age?: number) => void = (
  name: string,
  age: number
) => {
  if (age) {
    console.log(`小姐姐姓名:${name}, 今年:${age}岁`);
  } else {
    console.log(`小姐姐姓名:${name}`);
  }
};

下面哪种写法更加合理

const xjjInfo: (name: string, age?: number) => void = (
  ...
- age: number
+ age?: number
) => {
  ...
};

下面这句话是有问题的

- 需要注意的是,可选参数必须接在必需参数后面。换句话说,可选参数后面不允许再出现必需参数了
+ 需要注意的是,函数允许参数全部都是可选参数,可选参数后面不允许再出现必需参数

下面这条断言语句会报错

(window as any).foo = 1;