2017-09-25 146 views
1

我试图使用fs.readFile像这样打字稿...fs.readFile(字符串,编码) - TS2345

import {readFile} from 'fs'; 
let str = await readFile('my.file', 'utf8'); 

它导致这个错误:

TS2345: Argument of type '"utf8"' is not assignable to parameter of type '(err: ErrnoException, data: Buffer) => void'

我使用打字稿2.5.2,和@类型/节点8.0.30

+1

我不知道你的typeScript错误,但是你不能执行'await readFile(...)',因为'readFile()'不返回一个承诺。 “await”只适用于返回承诺的函数。 – jfriend00

+0

@ jfriend00非常感谢您的支持,并没有得到那么多。我确实想知道,但无法找到异步等待的文档。 – Drahcir

+0

网上有数百篇关于在Javascript中使用异步和等待的文章。你需要阅读以了解他们的工作方式。你可以从这里开始:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await – jfriend00

回答

0

的第三参数只能是一个字符串(编码)时,第三是一个回调,请参阅类型定义签名:

export function readFile(path: PathLike | number, options: { encoding: string; flag?: string; } | string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; 

因此,通过增加一个回调,将工作:

readFile('my.file', 'utf8',() => { 

}); 

或者使用promisification库来产生回调,并与await使用:

let str = promisify('my.file', 'utf8'); 
0

“await”是对Promises而不是回调。节点8.5.0支持从头开始promisify。使用

const util = require('util'); 
const fs = require('fs'); 
const asyncReadFile = util.promisify(fs.read); 

let str = await asyncReadFile('my.file', 'utf8'); 
//OR 
asyncReadFile('my.file', 'utf8').then((str) => { 
... 
}) 

快乐编码!