javascript - tệp d.ts xuất module
Tôi bắt đầu với Typescript và tôi cố gắng tạo một module mới nhưng tôi gặp một số vấn đề.
Tôi muốn nhập một file js vào index.ts của mình, vì vậy tôi biết rằng tôi phải tạo một file d.ts để tạo và giải thích hàm cho typescript. Vào index.ts của tôi tôi đặt cái này:
import Toto from "./toto";
Và đây là tệp d.ts của tôi:
declare module 'Toto' {
function myfunction(callback : Function);
export default myfunction;
}
Nhưng trong tập tin d.ts của tôi lại có lỗi này:
TS1128: Mong đợi Tuyên bố hoặc Khai báo
Tôi không hiểu tại sao vì bài kiểm tra của tôi rất dễ.
Tôi sử dụng webpack để xây dựng mã, đây là webpack.config.js của tôi
module.exports = {
entry: "./index.ts",
output: {
path: "bundle/",
filename: "bundle.js"
},
resolve: {
extensions : [".ts", ".tsx", ".js"]
},
module: {
loaders: [
{ test: /\.tsx?$/, loader: "ts-loader" }
]
}
};
Và tsconfig.json của tôi
{
"compilerOptions": {
"target" : "es5"
}
}
Nếu bạn có bất kỳ ý tưởng nào :)
Trân trọng
Câu trả lời #1
Nếu bạn muốn tải các tệp .js trực tiếp, chỉ cần đặt cờ "allowJS" trong các tùy chọn trình biên dịch. TS sẽ cố gắng sử dụng suy luận kiểu dựa trên JS. Tùy chọn trình biên dịch TS
Vì vậy trong trường hợp của bạn chỉ cần thêm cờ allowJS vào các tùy chọn trình biên dịch và bỏ qua tệp d.ts.
Câu trả lời #2
Cách sắp xếp này phù hợp với tôi
//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"
}
}
Chạy node main.js sẽ ghi đúng 42
Ngoài ra sử dụng allowJs
- từ thiết lập ở trên, xóa tệp định nghĩa
toto.d.ts - thêm
"allowJs":truevào tsconfig compilerOptions
=> Giải pháp đầu tiên yêu cầu tạo một tệp định nghĩa, nhưng bạn được hưởng lợi từ việc gõ kiểu khi sử dụng myfunc trong main.ts.
