当前位置: 首页 > 知识库问答 >
问题:

Angular的HashId

姜飞飙
2023-03-14

我试图在Angular的最后一个版本项目中使用http://hashids.org。

我找到了这个定义文件

// Type definitions for Hashids.js 1.x
// Project: https://github.com/ivanakimov/hashids.node.js
// Definitions by: Paulo Cesar <https://github.com/pocesar>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

/// <reference types="node" />

export default class Hashids {
    private version: string;
    private minAlphabetLength: number;
    private sepDiv: number;
    private guardDiv: number;
    private errorAlphabetLength: string;
    private errorAlphabetSpace: string;
    private alphabet: string[];
    private seps: string;
    private minHashLength: number;
    private salt: string;
    constructor(salt: string, minHashLength?: number, alphabet?: string);
    public decode(hash: string): number[];
    public encode(arg: number): string;
    public encode(arg: number[]): string;
    public encode(...args: number[]): string;
    public encodeHex(str: string): string;
    public decodeHex(hash: string): string;
    public hash(input: number, alphabet: string): string;
    public unhash(input: string[], alphabet: string): number;
} 

但当我尝试在我的角度项目中使用此代码时:

import * as Hashids from 'hashids';
export abstract class BaseService {
     protected getId(id: any) {
            const x = new Hashids('somesecretec');
            return x.encode(id);
     }
}

我得到了这个错误:

错误TS2351:无法将“new”与类型缺少调用或构造签名的表达式一起使用。

在我的本地,它工作正常,没有问题。但我试着编译一个生产设置,但它不起作用。

共有1个答案

令狐嘉禧
2023-03-14

问题是哈希ID导入的方式,使用下面的选项作为默认导入哈希ID

import Hashids from 'hashids';

使用*或{}进行命名导入,HashID在作为命名导入导入时抛出以下错误(名称默认值除外)

error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.

使用默认名称(因为默认导出也是具有默认名称的命名导出)

import {default as Hashids} from "hashids";
 类似资料:
  • Angular 2的DI系统(大部分)通过来控制。 具体来说是providers 和declarations数组。 (declarations是我们放置组件,管道和指令的地方;providers 是我们提供服务的地方) 例如: 这看起来很简单,但读者会想知道Angular 2如何知道如何构建ChatWidget 。如果ChatWidget是一个字符串或一个简单的函数怎么办? Angular 2假设

  • Angular 是一款十分流行且好用的 Web 前端框架,目前由 Google 维护。这个条目收录的是 Angular 2 及其后面的版本。由于官方已将 Angular 2 和之前的版本 Angular.js 分开维护(两者的 GitHub 地址和项目主页皆不相同),所以就有了这个页面。传送门:Angular.js 特性 跨平台 渐进式 Web 应用 借助现代化 Web 平台的力量,交付 app

  • 本文向大家介绍Angular 2 简单类扩展angular的Http类,包括了Angular 2 简单类扩展angular的Http类的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 任何Angular 2应用程序的核心理念是组件。实际上,整个应用程序可以被建模为这些组件的树。 在Angular1.x中,我们有路由器视图和指令,其工作类似于组件。指令组件的想法变得相当受欢迎。它们是通过使用控制器的指令创建的,同时依赖于controllerAs和bindToController属性。例如:

  • 问题内容: 我正在尝试获取Angular 服务及其相关对象和API 的句柄。当我查看控制台中的对象时,我看到: 它提出了一些问题: 和之间有什么区别?什么时候使用每个? in 和in 之间有什么关系? 如果我有一堆嵌套的Promise发生错误,是否总是会调用最外层的函数?如果其中一个嵌套的Promise也定义了catch函数怎么办?该捕获会阻止最外部的捕获执行吗? 谢谢。 问题答案: 1)是创建延

  • 问题内容: 我正在尝试使用Angular 2+(在撰写此问题时为Angular 4.1.0)来引导Angular 1.X应用程序。我遵循了T 的在线指南,但似乎没有取得进展。 我正在使用ES2015 +(通过Babel编译)和TypeScript的混合体。一切都能正确编译,我可以分别成功运行Angular 1和Angular 2。如果有区别,可以使用Webpack将它们一起编译。 我的Angula