首页 > 其他分享 >[Typescript] Annotating the Errors Thrown by a Function

[Typescript] Annotating the Errors Thrown by a Function

时间:2024-08-07 19:06:41浏览次数:6  
标签:Errors const success Typescript user return Annotating data id

/**
 * How do we annotate the errors this function throws?
 */

type PossibleErrors = SyntaxError | DOMException;

const getUserFromLocalStorage = (id: string) => {
  const user = localStorage.getItem(id);
  if (!user) {
    return undefined;
  }

  return JSON.parse(user);
};

try {
  const user = getUserFromLocalStorage("user-1");
} catch (
  // How do we make this typed as PossibleErrors?
  e
) {}

 

The only possible way is returning a result object from the function:

const getUserFromLocalStorage = (
  id: string,
):
  | {
      success: true;
      data: any;
    }
  | {
      success: false;
      error: SyntaxError | DOMException;
    } => {
  try {
    const user = localStorage.getItem(id);
    if (!user) {
      return {
        success: true,
        data: undefined,
      };
    }

    return {
      success: true,
      data: JSON.parse(user),
    };
  } catch (e) {
    if (e instanceof DOMException) {
      return {
        success: false,
        error: e,
      };
    }
    if (e instanceof SyntaxError) {
      return {
        success: false,
        error: e,
      };
    }
    throw e;
  }
};

const user = getUserFromLocalStorage("user-1");

if (user.success) {
  user.data;
} else {
  user.error;
}

 

标签:Errors,const,success,Typescript,user,return,Annotating,data,id
From: https://www.cnblogs.com/Answer1215/p/18347658

相关文章

  • [Typescript] Type incompatible function argument as never
    Forthefollowingcode:constobjOfFunctions={string:(input:string)=>input.toUpperCase(),number:(input:number)=>input.toFixed(2),boolean:(input:boolean)=>(input?"true":"false"),};constformat=(i......
  • Centos8下载报错:Errors during downloading metadata for repository ‘appstream‘:
    前提使用docker安装centos8步骤复现:启动后发现环境中没有vim功能,想着安装一下,发现报错:Errorsduringdownloadingmetadataforrepository'appstream':原因:找到AI工具翻译后:结合centos系统在2021年就没有在进行维护了,再进行网上大量查阅得知应该是yum源的问题,这里......
  • [Typescript] Typing Functions with Object Params
    import{expect,it,vitest}from'vitest';constlogId=(obj:{id:string})=>{console.log(obj.id);};constlogName=(obj:{name:string})=>{console.log(obj.name);};constloggers=[logId,logName];constlogAll=(o......
  • [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编译器提供必要的类型信息......
  • psycopg2.errors.InvalidTextRepresentation
    我正在尝试在Flask应用程序中运行原始sql查询。这就是我所拥有的@app.route("/price/compare",methods=["POST"])defpost():data=request.jsoncur=conn.cursor()query_stock="""SELECTname,size,MIN(price::float)asprice,linkFROM......
  • TypeScript 基础类型与类型声明
    前言在JavaScript中,变量是没有类型的,变量的值的类型是在运行时确定的,这被称为动态类型。这意味着可以在不同的时间将不同类型的值赋给同一个变量,并且JavaScript会在运行时根据当前赋给变量的值来确定其类型。示例:leta;//声明一个变量aa=10;//此时a的......
  • TypeScript 类型断言、类型推论
    类型断言类型断言是一种TypeScript特性,用于告诉编译器将一个值视为特定的类型,即使编译器本身的类型推断可能不同。类型断言并不会改变变量的实际运行时类型,而是在编译阶段告知TypeScript编译器开发者期望该表达式具有某种类型。注意:类型断言不是类型转换,因为转换通常......
  • [Typescript] Advance query builder example
    typeBaseTable={[colName:string]:string|number|boolean;}typeColumns<Tablesextends{[tableName:string]:BaseTable}>={[KinkeyofTables]:Kextendsstring?(keyofTables[K]extendsstring?`${K}.${keyofTables[K]}`:never):......
  • [Typescript] Query builder example
    classQueryBuilder{privatefields:string[]=[]privatewheres:Record<string,string>={}privatetable:string=""select(...columns:string[]){this.fields=columnsreturnthis}from(table:string){t......