javascript - arquivo d.ts exportar módulo
Eu começo com Typescript e tento criar um novo módulo, mas tenho alguns problemas.
Quero importar um arquivo js no meu index.ts, então sei que preciso criar um arquivo d.ts para criar e explicar a função para o TypeScript. No meu index.ts eu coloco isto:
import Toto from "./toto";
E este é o meu arquivo d.ts :
declare module 'Toto' {
function myfunction(callback : Function);
export default myfunction;
}
Mas no meu arquivo d.ts eu tenho este erro:
TS1128 : Espera-se Declaração ou Instrução
Eu não entendo por quê, porque meu teste é muito fácil.
Eu uso webpack para compilar o código, este é o meu webpack.config.js
module.exports = {
entry: "./index.ts",
output: {
path: "bundle/",
filename: "bundle.js"
},
resolve: {
extensions : [".ts", ".tsx", ".js"]
},
module: {
loaders: [
{ test: /\.tsx?$/, loader: "ts-loader" }
]
}
};
E meu tsconfig.json
{
"compilerOptions": {
"target" : "es5"
}
}
Se você tiver alguma ideia :)
Atenciosamente
Resposta #1
Se você quiser carregar arquivos .js diretamente, basta definir a flag "allowJS" nas opções do compilador. O TS então tentará usar inferência de tipos com base no JS. Opções do compilador TS
Então, no seu caso, basta adicionar a flag allowJS às opções do compilador e pular o arquivo d.ts.
Resposta #2
Essa configuração funciona para mim
//toto.js
function myfunction(callback) {
callback("42")
}
exports.default=myfunction
//toto.d.ts
export default function myfunction(callback : Function);
//main.ts
import myfunc from './toto'
myfunc((res) => console.log(res) )
//tsconfig.json
{
"compilerOptions": {
"target" : "es5"
}
}
Executar node main.js registra corretamente 42
Alternativamente usando allowJs
- do arranjo acima, remova o arquivo de definição
toto.d.ts - adicione
"allowJs":trueem tsconfig compilerOptions
=> A primeira solução requer a criação de um arquivo de definição, mas você se beneficia de tipagens ao usar myfunc em main.ts.
