Menurut deskripsi, saya harus dapat mengimpor modul ini ke TypeScript sebagai berikut:
import * as SignaturePad from 'signature_pad';
TypeScript menolak untuk mengenali ini sebagai valid karena tidak ada modul yang diekspor. Harap ekspor modul untuk kompatibilitas TypeScript.
Berikut adalah topik stack overflow mengenai hal ini.
Jika tidak berhasil, Anda dapat mencoba mengimpor langsung dari signature_pad/dist/signature_pad.mjs
.
Versi berikutnya kemungkinan besar akan ditulis ulang di naskah - lihat naskah cabang. Saya "hanya" perlu mencari waktu luang untuk membersihkannya dan mencari tahu konfigurasi rollup untuk semua versi (umd es5, es6, non-minified, minified, dll.) dan cara menghasilkan file deklarasi TS.
@szimek Dapat
import * as SignaturePad from 'signature_pad';
Memberi SignaturePad bukan konstruktor
import * as SignaturePad from 'signature_pad/dist/signature_pad.mjs';
Memberi SignaturePad bukan konstruktor
const SignaturePad = require('signature_pad');
Memberi SignaturePad bukan konstruktor
import SignaturePad from 'signature_pad';
Berfungsi, tetapi memberikan kesalahan TypeScript
Apa sebenarnya yang ada di variabel SignaturePad
dalam kasus ini? Kode di signature_pad/dist/signature_pad.mjs
hanya dibundel bersama kode sumber ES6 dengan ekspor default. Seharusnya hanya berfungsi, kecuali TS tidak menangani ekspor default.
@szimek TS menangani ekspor default dengan baik, masalahnya ada di definisi index.d.ts @types/signature_pad.
Tetapi perpustakaan ini tidak menyediakan file deklarasi TypeScript.
@szimek bukan? Lalu apa yang diinstal ketika Anda melakukan install @types/signature_pad --save-dev
, pasti ada file deklarasi TS. Bukankah itu dibuat oleh orang yang sama??
Saya tidak tahu ;) Anda dapat melihat semua file yang diterbitkan misalnya di sini: https://www.jsdelivr.com/package/npm/signature_pad.
@szimek Saya baru saja memperhatikan komentar saya sebelumnya tidak menunjukkan seluruh baris instal, karena karakter @
. Saya sudah mengeditnya. Pada dasarnya jika Anda melakukannya install @types/signature_pad --save-dev
, Anda akan melihat definisi diinstal di folder @types/signature_pad
. Aku ingin tahu siapa yang melakukan itu? Mungkin kita perlu menghubungi mereka dan memperbaikinya dan menggabungkannya ke dalam paket default lol
Sepertinya Anda menggunakan file definisi dari PastiTyped .
Jika saya membaca deklarasi dengan benar, ini mungkin berhasil (maaf tidak mencobanya, saya baru saja menemukan masalah ini):
import { SignaturePad } from 'signature_pad';
@strongui Saya mendapat kesalahan yang sama seperti Anda. Saya mencoba semuanya di komentar,
Saya juga mencoba komentar Anda @szimek . Benar-benar tidak berhasil.
Saya menggunakan pad tanda tangan di file JS sekarang tetapi saya harus mengubah tempat ke TS
Saya menggunakan versi simpul v6.11.2 dan versi TypeScript adalah v2.6.2
npm version
{ npm: '3.10.10',
ares: '1.10.1-DEV',
node: '6.11.2',
zlib: '1.2.11' }
Saya baru saja mencobanya menggunakan TypeScript 2.7.2 dan berfungsi dengan baik.
index.ts
import SignaturePad from 'signature_pad';
new SignaturePad(document.querySelector('canvas'));
index.html
<html>
<body>
<canvas style="border: 2px solid #000"></canvas>
<script src="bundle.js"></script>
</body>
</html>
tsconfig.json
{
"compilerOptions": {
"outDir": ".",
"noImplicitAny": true,
"module": "es6",
"target": "es3"
}
}
webpack.config.js
module.exports = {
entry: './index.js',
output: { filename: 'bundle.js' },
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader',
exclude: /node_modules/
}
]
},
resolve: {
extensions: [ '.ts', '.js' ]
}
};
Jalankan yarn add signature_pad typescript webpack ts-loader && yarn run webpack
. Kemudian buka index.html
dan itu akan berfungsi.
@szimek terima kasih ini bekerja untuk saya
Bekerja untuk saya menggunakan TypeScript 2.4.2 dan mengimpornya seperti @szimek di komentar di atas.
tsconfig.json
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"dom",
"es2015"
],
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"target": "es5"
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
],
"compileOnSave": false,
"atom": {
"rewriteTsconfig": false
}
}
Bagi mereka yang mendapatkan SignaturePad bukan kesalahan default , seperti:
new SignaturePad.default(canvas, {
backgroundColor: 'rgb(255, 255, 255)'
});
Saya baru saja merilis versi beta yang ditulis ulang dalam TypeScript. File deklarasi sekarang disediakan oleh perpustakaan. Anda dapat menginstalnya menggunakan yarn add signature_pad@beta
. Kode sumber masih tersedia hanya di typescript
branch .
Itu masih menggunakan ekspor default, tetapi saya mengujinya dengan Webpack 4 dan TypeScript 2.7.2 dan berfungsi jika saya mengimpornya menggunakan import SignaturePad from 'signature_pad'
.
Akan luar biasa untuk mendapatkan umpan balik, jika berhasil, jika ada masalah, dll.
Kami menggunakan versi beta di aplikasi TypeScript 2.8 dan berfungsi dengan baik.
Hanya masalah kecil:
const touch = event.targetTouches[0]
tidak ditentukan.toDataURL
harus memiliki argumen yang ditandai sebagai opsional jika Anda ingin mencocokkan metode toDataURL
kanvas.@StevenBarnettST Diperbaiki! Terima kasih telah melaporkan masalah ini. Besok saya akan merilis versi beta baru.
Apa cara yang benar untuk mengikat TYPE/antarmuka signaturepad ke variabel, untuk pelengkapan otomatis dan pemeriksaan ts?
Bagi mereka yang mendapatkan SignaturePad bukan kesalahan default , seperti:
new SignaturePad.default(canvas, { backgroundColor: 'rgb(255, 255, 255)' });
Ini bekerja untuk saya. Terima kasih banyak! (Symfony Webpack Encore)
Saya melakukan solusi untuk membuatnya berfungsi:
var SignaturePad = require('signature_pad/dist/signature_pad.js');
Komentar yang paling membantu
Saya baru saja merilis versi beta yang ditulis ulang dalam TypeScript. File deklarasi sekarang disediakan oleh perpustakaan. Anda dapat menginstalnya menggunakan
yarn add signature_pad@beta
. Kode sumber masih tersedia hanya ditypescript
branch .Itu masih menggunakan ekspor default, tetapi saya mengujinya dengan Webpack 4 dan TypeScript 2.7.2 dan berfungsi jika saya mengimpornya menggunakan
import SignaturePad from 'signature_pad'
.Akan luar biasa untuk mendapatkan umpan balik, jika berhasil, jika ada masalah, dll.