接口(Interface)

示例

const getUserInfo = function (user) {
    return `name: ${user.name}, age: ${user.age}`;
};

getUserInfo({ name: 'koala', age: 18 });

// 错误的调用
getUserInfo(); // Uncaught TypeError: Cannot read property 'name' of undefined
console.log(getUserInfo({ name: 'long' })); // name: long, age: undefined
getUserInfo({ name: 'long', height: 1.66 }); // name: long, age: undefined

改版1

const getUserInfo = (user: { name: string, age: number }): string => {
  return `name: ${user.name} age: ${user.age}`;
};
getUserInfo({ name: 'long', age: 18 });

// 错误的调用
// getUserInfo(); // 错误信息:An argument for 'user' was not provided.
// getUserInfo({ name: 'long' }); // 错误信息:Property 'age' is missing in type '{ name: string; }'
// getUserInfo({ name: 'long', height: 1.88 }); // 错误信息:类型不匹配

重构1

  // 先定义一个接口
  interface IUser {
    name: string;
    age: number;
  }

  const getUserInfo = (user: IUser): string => {
    return`name: ${user.name}, age: ${user.age}`;
  };

  // 正确的调用
  getUserInfo({name: "long", age: 18});

重构2

  type IUserInfoFunc = (user: IUser) =>string;

  interface IUser {
    name: string;
    age: number;
  }

  const getUserInfo: IUserInfoFunc = (user) => {
    return`name: ${user.name}, age: ${user.age}`;
  };

  getUserInfo({name: "koala", age: 18});
  //  getUserInfo();