Pesquisa de site

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":true em 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.