89

我有几个实用功能。将它们打包然后导入它们的最佳方法是什么?

这就是我想要做的:

import * as util from './util'

export class myClass{
     constructor()
     {
           util.doSomething("test");
     }
}

然后在课堂上:

export class Util{
    doSomething(val: string){ return val;}

    doSomethingElse(val: string{ return val;}
}

我从 VS 得到的错误信息是:

Property doSomething does not exist on type util.

4

5 回答 5

144

如果您创建的文件utils.ts包含

export default class Utils {
    static doSomething(val: string) { return val; }
    static doSomethingElse(val: string) { return val; }
}

那么您可以像这样简化您的客户端代码:

import Utils from './utils'

export class MyClass {
     constructor()
     {
         Utils.doSomething("test");
     }
}
于 2016-06-06T14:25:44.267 回答
47

这里有几个问题:

  1. 你没有实例化任何东西,并且doSomething是一个实例方法
  2. 当你这样做时import * as utilutil代表模块,而不是其中的对象。

如果你愿意Util,你应该只导入:

import { Util } from './util'

接下来,您应该实例化Util, 在最后调用它的方法之前:

var u = new Util();
u.doSomething("test");

这是您修补的代码:

import { Util } from './util'

export class MyClass{
     constructor()
     {
         var u = new Util();
         u.doSomething("test");
     }
}

尽管如此,您使用实用程序的方式似乎有些奇怪。这完全是个人意见,但我不会在构造函数中调用“做某事”的方法,即导致副作用。

此外,其中的方法Util看起来并不需要在该类中,因为该类不包含它们所依赖的状态。您始终可以从模块中导出常规函数。如果您像这样编写 utils 模块:

export function doSomething(val: string) { return val; }

export function doSomethingElse(val: string) { return val; }

您将直接导出您的函数并回避实例化的麻烦,事实上您的原始代码将按原样正常工作。

于 2015-09-25T20:51:10.370 回答
10

替代方式:

  1. 导出文件中的常量utils.ts

    export const doSomething = (val: string): any => {
      return val;
    };
    
    export const doSomethingElse = (val: string): any => {
      return val;
    };
    
  2. *.ts在主文件中导入并使用此方法:

    import { doSomething, doSomethingElse } from './util';
    ...
    let value1 = doSomething('abc');
    let value2 = doSomethingElse ('efg');
    
于 2019-05-21T18:56:48.000 回答
3

或者您可以导出为对象文字:

export const Util = {
    doSomething(val: string){ return val;},
    doSomethingElse(val: string{ return val;}
}
于 2019-01-03T15:09:25.983 回答
1

您还可以创建一个util.ts具有导出功能的类

export const formatDateOfBirth = 
(dob: string) : string => `${dob.substring(0, 4)}-${dob.substring(4, 6)}-${dob.substring(6, 8)}`;

现在你可以导入如下方法,共享文件夹结构是src> app> shared,我在里面调用这个导入src> app> shelf>shelf.component.ts文件

import { formatDateOfBirth } from '../shared/utils/util';
public getFormattedDate(dob: string):string{
  return formatDateOfBirth(dob);
}
于 2019-04-02T12:28:53.783 回答