TypeScript子模块?

时间:2016-05-22 04:36:45

标签: javascript module typescript ecmascript-6 definitelytyped

目前我这样做:

import {validators} from 'marker';

validators.isEmail('foo@bar.com');

相反,我想:

isEmail('foo@bar.com');
// Without cheating by just: `const isEmail = validators.isEmail`

我如何import只有isEmail符号?

这是一个小小的测试用例,请注意我的实际模块有很多验证器和其他子模块(不只是validators

marker.d.ts

declare var marker: marker.marker;

declare module marker {
    export interface marker {
        validators: IValidators;
    }

    export interface IValidators {
        isEmail(input: string): boolean;
    }
}

export = marker;

index.ts

import * as vs from './validators'

export const validators = vs;

validators.ts

export function isEmail(input: string): boolean { return true }

3 个答案:

答案 0 :(得分:0)

请注意确定您不想包含

的具体位置
 // Without cheating by just: `const isEmail = validators.isEmail`

以下解决方案基于您不希望在使用validators.isEmail的ts文件中定义isEmail的假设。

假设index.ts标记包的主文件,您可以直接公开所有验证方法。

<强> index.ts

   import * as vs from './validators'

   export const isEmail = vs.isEmail;

并使用如下,

  import { isEmail } from 'marker';

  isEmail('foo@bar.com');

您还必须对定义文件进行必要的更改。

希望这会有所帮助!!

答案 1 :(得分:0)

你应该作弊。但是你可以使用进一步的解构来更好地作弊(更多https://basarat.gitbooks.io/typescript/content/docs/destructuring.html)。而不是

const isEmail = validators.isEmail;

你可以

const {isEmail} = validators;

答案 2 :(得分:0)

你可以尝试

const { validators: { isEmail } } = require('marker');

isEmail('aaa@bbb');