2017-02-20 5 views
2

У меня есть этот простой модуль, который экспортирует функцию, которая возвращает экземпляр ChildProcess. Проблема в том, что я не знаю, как добавить информацию о возвращаемом типе, потому что я не знаю, как получить ссылку на класс ChildProcess.Ссылка на класс ChildProcess для типов TypeScript

//core 
import * as cp from 'child_process'; 
import * as path from 'path'; 

//project 
const run = path.resolve(__dirname +'/lib/run.sh'); 

export = function($commands: Array<string>, args?: Array<string>) { 

    const commands = $commands.map(function(c){ 
      return String(c).trim(); 
    }); 

    return cp.spawn(run, (args || []), { 
     env: Object.assign({}, process.env, { 
      GENERIC_SUBSHELL_COMMANDS: commands.join('\n') 
     }) 
    }); 

}; 

, если вы посмотрите на документы Node.js, он говорит cp.spawn() возвращает экземпляр класса ChildProcess.

Если вы посмотрите здесь: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/index.d.ts

мы видим, определение типа для класса ChildProcess: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/index.d.ts#L1599

Однако, я запутался, как ссылаться на это в моей машинописи коде.

Я не думаю, что я должен импортировать @types/node, поскольку это должно быть devDependency.

Что я должен делать?

мне нужно сделать что-то вроде:

export = function($commands: Array<string>, args?: Array<string>): ChildProcess { 

} 

ответ

3

Похоже ChildProcess находится под child_process модулем, так что вы должны быть в состоянии ссылаться на него с существующим импортом:

import * as cp from 'child_process'; 

export = function($commands: Array<string>, args?: Array<string>): cp.ChildProcess { 
    //... 
} 
+0

получил его, все еще не совсем уверен, как это работает, но это должно сделать это, позвольте мне проверить –

1

Для меня он работал для изменения

import { spawn } from 'child_process'; 

до

import { ChildProcess, spawn } from 'child_process'; 

Это избавились от ошибки:

error TS4023: Exported variable 'readGitTags' has or is using name 'ChildProcess' from external module "child_process" but cannot be named.

Смежные вопросы