首页 > 其他分享 >[Typescript] Typing Functions with Object Params

[Typescript] Typing Functions with Object Params

时间:2024-08-06 19:54:47浏览次数:11  
标签:Functions Typescript obj string Object func const id name

import { expect, it, vitest } from 'vitest';

const logId = (obj: { id: string }) => {
  console.log(obj.id);
};
const logName = (obj: { name: string }) => {
  console.log(obj.name);
};

const loggers = [logId, logName];

const logAll = (obj) => {
  loggers.forEach((func) => func(obj));
};

it('should log id and name of an object', () => {
  const consoleSpy = vitest.spyOn(console, 'log');

  logAll({ id: '1', name: 'Waqas' });

  expect(consoleSpy).toHaveBeenCalledWith('1');
  expect(consoleSpy).toHaveBeenCalledWith('Waqas');
});

We need to type the logAllfunction param.

 

So far, as we can see the type of funcis (obj: {id: string} & {name: string})

 

I would expect the obj to be type as {id: string} | {name: string}, but Typescript doesn't work like that.

 

Solution: 

const logAll = (obj: { id: string; name: string }) => {
  loggers.forEach((func) => func(obj));
};

// or

const logAll = (obj: { id: string } & { name: string }) => {
  loggers.forEach((func) => func(obj));
};

 

标签:Functions,Typescript,obj,string,Object,func,const,id,name
From: https://www.cnblogs.com/Answer1215/p/18345891

相关文章

  • [Typescript] Understanding TypeScript's Function Parameter Comparisons
    Makethosepass:import{Equal,Expect}from"@total-typescript/helpers";typeEvent="click"|"hover"|"scroll";typeCallbackType=unknown;constlistenToEvent=(callback:CallbackType)=>{};listen......
  • 【TS】 TypeScript声明文件:打通JavaScript和TypeScript的桥梁
     TypeScript声明文件的讲解: TypeScript声明文件(DeclarationFile)在TypeScript项目中具有举足轻重的地位,它是连接TypeScript严格的类型系统与外部无类型或类型不明确的JavaScript代码的关键纽带。 声明文件的核心价值在于为TypeScript编译器提供必要的类型信息......
  • JSON parse error: Cannot deserialize instance of `java.lang.Long` out of START_O
    这个问题的实际原因就是:    后端id(Long类型)用的雪花算法生成主键id    后端生成id位:1820397662671867904    前端查询id的结果为:1820397662671868000产生的原因:    后端生成为19位,前端接受并展示,使用的类型是number类型是16位   ......
  • const objectUtil = require('../../utils/object'); const toolUtil = require('../.
    //模态框functionshowModal(title,content,confirm,cancel){wx.showModal({title:title,content:content,showCancel:true,success(res){if(res.confirm){confirm(confirm)}elseif(res.canc......
  • TypeScript 基础类型与类型声明
    前言在JavaScript中,变量是没有类型的,变量的值的类型是在运行时确定的,这被称为动态类型。这意味着可以在不同的时间将不同类型的值赋给同一个变量,并且JavaScript会在运行时根据当前赋给变量的值来确定其类型。示例:leta;//声明一个变量aa=10;//此时a的......
  • TypeScript 类型断言、类型推论
    类型断言类型断言是一种TypeScript特性,用于告诉编译器将一个值视为特定的类型,即使编译器本身的类型推断可能不同。类型断言并不会改变变量的实际运行时类型,而是在编译阶段告知TypeScript编译器开发者期望该表达式具有某种类型。注意:类型断言不是类型转换,因为转换通常......
  • 多态,抽象,接口,Object,Equals
    1.多态1.1编译时多态:在编译时就能够确定调用哪个方法​方法重载是编译时多态,在编译期根据参数的数据类型,个数以及次序来确定调用方法1.2运行时多态:只有在运行时才能确定调用哪个方法,主要指动态绑定来实现,动态绑定是程序运行时确定调用哪个方法的过程,他依赖于对......
  • TypeError: ‘float’ object is not iterable 深度解析
    TypeError:‘float’objectisnotiterable深度解析与实战指南在Python编程中,TypeError:'float'objectisnotiterable是一个常见的错误,通常发生在尝试对浮点数(float)进行迭代操作时。这个错误表明代码中存在类型使用不当的问题,因为浮点数不是可迭代对象。本文将深入......
  • TypeError: ‘dict’ object is not callable 深度解析
    TypeError:‘dict’objectisnotcallable深度解析在Python编程中,TypeError:'dict'objectisnotcallable是一个常见的错误,通常发生在尝试调用一个字典对象时。这个错误表明代码中存在逻辑错误,可能是将字典误用为函数或方法。本文将深入探讨这一错误的常见原因,并提......
  • Objective-C学习笔记(协议和代理)
    协议协议是多个类共享的一个方法列。协议中列出的方法没有相应的实现,计划由其他人来实现。可以定义这些方法为必须实现的,也可以为可选择实现的@protocal协议名//在此处添加必须实现的协议方法@optional//在此处添加可选择实现的协议方法@end遵循协议也符合继承关系......