μ€λͺ
μ λ°λ₯΄λ©΄ λ€μκ³Ό κ°μ΄ μ΄ λͺ¨λμ TypeScriptλ‘ κ°μ Έμ¬ μ μμ΄μΌ ν©λλ€.
import * as SignaturePad from 'signature_pad';
λ΄λ³΄λΈ λͺ¨λμ΄ μκΈ° λλ¬Έμ TypeScriptλ μ΄κ²μ μ ν¨ν κ²μΌλ‘ μΈμνμ§ μμ΅λλ€. TypeScript νΈνμ±μ μν΄ λͺ¨λμ λ΄λ³΄λ΄μμμ€.
λ€μμ μ΄μ κ΄ν μ€ν μ€λ²νλ‘ μ£Όμ μ λλ€.
μλνμ§ μμΌλ©΄ signature_pad/dist/signature_pad.mjs
μμ μ§μ κ°μ Έμ€κΈ°λ₯Ό μλν μ μμ΅λλ€.
λ€μ λ²μ μ TypeScriptλ‘ λ€μ μμ±λ κ°λ₯μ±μ΄ λμ΅λλ€. typescript λΆκΈ°λ₯Ό μ°Έμ‘°νμΈμ. λλ "κ·Έλ₯" κ·Έκ²μ μ 리νκ³ λͺ¨λ λ²μ (umd es5, es6, non-minified, minified λ±)μ λν λ‘€μ ꡬμ±κ³Ό TS μ μΈ νμΌμ μμ±νλ λ°©λ²μ μμλΌ μμ μκ°μ μ°ΎμμΌ ν©λλ€.
@szimek μ΄κ²μ .tsx νμΌ λ΄μμ μ¬μ ν μλνμ§ μλλ€λ κ²μ νμΈν μ μμ΅λλ€.
import * as SignaturePad from 'signature_pad';
SignaturePadκ° μμ±μκ° μλμ λνλ
λλ€.
import * as SignaturePad from 'signature_pad/dist/signature_pad.mjs';
SignaturePadκ° μμ±μκ° μλμ λνλ
λλ€.
const SignaturePad = require('signature_pad');
SignaturePadκ° μμ±μκ° μλμ λνλ
λλ€.
import SignaturePad from 'signature_pad';
μλνμ§λ§ μ½μμ typescript μ€λ₯κ° λ°μν©λλ€ . ...node_modules/@types/signature_pad/index.d.ts' is not a module.
μ΄ κ²½μ° SignaturePad
λ³μμ μ νν 무μμ΄ μμ΅λκΉ? signature_pad/dist/signature_pad.mjs
μ½λλ κΈ°λ³Έ λ΄λ³΄λ΄κΈ°μ ν¨κ» ES6 μμ€ μ½λμ ν¨κ» λ²λ€λ‘ μ 곡λ©λλ€. TSκ° κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό μ²λ¦¬νμ§ μλ ν μ λλ‘ μλν΄μΌ ν©λλ€.
@szimek TSλ κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό μ μ²λ¦¬ν©λλ€. λ¬Έμ λ @types/signature_pad index.d.ts μ μμ μμ΅λλ€.
κ·Έλ¬λ μ΄ λΌμ΄λΈλ¬λ¦¬λ TypeScript μ μΈ νμΌμ μ 곡νμ§ μμ΅λλ€.
@szimek κ·Έλ μ§ μμ΅λκΉ? κ·Έλ¬λ©΄ install @types/signature_pad --save-dev
νλ©΄ μ€μΉλλ κ²μ νμ€ν TS μ μΈ νμΌμ΄ μμ΅λλ€. κ°μ μ¬λλ€μ΄ λ§λ κ±° μλ??
λͺ°λΌ ;) κ²μ μ€μΈ λͺ¨λ νμΌμ λ³Ό μ μμ΅λλ€ . μ:
@szimek λλ @
λ¬Έμ λλ¬Έμ μ 체 μ€μΉ λΌμΈμ νμνμ§ μκΈ° μ μ λ΄ μ£Όμμ λ°κ²¬νμ΅λλ€. μμ νμ΅λλ€. κΈ°λ³Έμ μΌλ‘ install @types/signature_pad --save-dev
νλ©΄ @types/signature_pad
ν΄λμ μ€μΉλ μ μλ₯Ό λ³Ό μ μμ΅λλ€. λκ° κ·Έλ° μ§μ νλμ§ κΆκΈνλ€. μ΄μ©λ©΄ μ°λ¦¬λ κ·Έλ€μκ² μ°λ½νμ¬ μμ νκ³ κΈ°λ³Έ ν¨ν€μ§μ λ³ν©ν΄μΌ ν μλ μμ΅λλ€.
νμ€ν Typed μ μ μ νμΌμ μ¬μ©νκ³ μλ κ² κ°μ΅λλ€.
μ μΈμ μ¬λ°λ₯΄κ² μ½μΌλ©΄ μλν μ μμ΅λλ€(μλνμ§ μμ μ£μ‘ν©λλ€. λ°©κΈ μ΄ λ¬Έμ λ₯Ό λ°κ²¬νμ΅λλ€).
import { SignaturePad } from 'signature_pad';
@strongui μ λ λΉμ κ³Ό κ°μ μ€μλ₯Ό νμ΅λλ€. λκΈμ μλκ±° λ€ ν΄λ΄€λλ°
λλ λν λΉμ μ μ견 @szimekμ μλ
μ§κΈμ JS νμΌμ μλͺ
ν¨λλ₯Ό μ¬μ©νκ³ μμ§λ§ TSλ‘ μ₯μλ₯Ό λ³κ²½ν΄μΌν©λλ€
λ
Έλ λ²μ v6.11.2λ₯Ό μ¬μ©νκ³ Typescript λ²μ μ v2.6.2μ
λλ€.
npm version
{ npm: '3.10.10',
ares: '1.10.1-DEV',
node: '6.11.2',
zlib: '1.2.11' }
λ°©κΈ TypeScript 2.7.2λ₯Ό μ¬μ©νμ¬ μλνλλ° μ μλν©λλ€.
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' ]
}
};
yarn add signature_pad typescript webpack ts-loader && yarn run webpack
ν©λλ€. κ·Έλ° λ€μ index.html
μ΄λ©΄ μλν©λλ€.
@szimek κ°μ¬ν©λλ€ κ·Έκ²μ λλ₯Ό μν΄ μλν©λλ€
TypeScript 2.4.2λ₯Ό μ¬μ©νκ³ μμ μ£Όμμμ @szimek κ³Ό κ°μ΄ κ°μ Έμ€κΈ°λ₯Ό μ¬μ©νμ¬ μλν©λλ€.
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
}
}
κ·Έλ€μ μν΄ SignaturePadλ requirejs λ° webpack(λλ laravel mix)μ νλ μλμμ κ° μλλλ€. λ€μκ³Ό κ°μ΄ default μ ν¨κ» μ¬μ©νμμμ€.
new SignaturePad.default(canvas, {
backgroundColor: 'rgb(255, 255, 255)'
});
λ°©κΈ TypeScriptλ‘ λ€μ μμ±λ λ² ν λ²μ μ μΆμνμ΅λλ€. μ μΈ νμΌμ μ΄μ λΌμ΄λΈλ¬λ¦¬μμ μ 곡λ©λλ€. yarn add signature_pad@beta
μ¬μ©νμ¬ μ€μΉν μ μμ΅λλ€. μμ€ μ½λλ μ¬μ ν typescript
λΆκΈ° μμλ§ μ¬μ©ν μ μμ΅λλ€.
μ¬μ ν κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό μ¬μ©νμ§λ§ Webpack 4 λ° TypeScript 2.7.2λ‘ ν
μ€νΈνμΌλ©° import SignaturePad from 'signature_pad'
μ¬μ©νμ¬ κ°μ Έμ€λ©΄ μλν©λλ€.
μλνλμ§, λ¬Έμ κ° μλμ§ λ±μ νΌλλ°±μ λ°λ κ²μ΄ μ’μ΅λλ€.
TypeScript 2.8 μ±μμ λ² ν λ²μ μ μ¬μ©νκ³ μμΌλ©° μ μλν©λλ€.
μ¬μν λ¬Έμ :
const touch = event.targetTouches[0]
μ΄ μ μλμ§ μμκΈ° λλ¬Έμ ν°μΉ μ’
λ£ μ μ²λ¦¬λμ§ μμ μ€λ₯κ° λ°μν©λλ€.toDataURL
λ©μλμ μΌμΉμν€λ €λ©΄ toDataURL
λ©μλμ μ΅μ
μΌλ‘ νμλ μΈμκ° μμ΄μΌ ν©λλ€.@StevenBarnettST μμ νμ΅λλ€! μ΄λ¬ν λ¬Έμ λ₯Ό μ κ³ ν΄ μ£Όμ μ κ°μ¬ν©λλ€. λ΄μΌ λλ μλ‘μ΄ λ² ν λ²μ μ μΆμν κ²μ λλ€.
μλ μμ± λ° ts κ²μ¬λ₯Ό μν΄ μλͺ ν¨λμ TYPE/μΈν°νμ΄μ€λ₯Ό λ³μμ λ°μΈλ©νλ μ¬λ°λ₯Έ λ°©λ²μ 무μμ λκΉ?
κ·Έλ€μ μν΄ SignaturePadλ requirejs λ° webpack(λλ laravel mix)μ νλ μλμμ κ° μλλλ€. λ€μκ³Ό κ°μ΄ default μ ν¨κ» μ¬μ©νμμμ€.
new SignaturePad.default(canvas, { backgroundColor: 'rgb(255, 255, 255)' });
μ΄κ²μ λλ₯Ό μν΄ μλν©λλ€. μ λ§ κ°μ¬ν©λλ€! (μ¬ν¬λ μΉν© μμ½λ₯΄)
μλνλλ‘ ν΄κ²° λ°©λ²μ μννμ΅λλ€.
var SignaturePad = require('signature_pad/dist/signature_pad.js');
κ°μ₯ μ μ©ν λκΈ
λ°©κΈ TypeScriptλ‘ λ€μ μμ±λ λ² ν λ²μ μ μΆμνμ΅λλ€. μ μΈ νμΌμ μ΄μ λΌμ΄λΈλ¬λ¦¬μμ μ 곡λ©λλ€.
yarn add signature_pad@beta
μ¬μ©νμ¬ μ€μΉν μ μμ΅λλ€. μμ€ μ½λλ μ¬μ νtypescript
λΆκΈ° μμλ§ μ¬μ©ν μ μμ΅λλ€.μ¬μ ν κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό μ¬μ©νμ§λ§ Webpack 4 λ° TypeScript 2.7.2λ‘ ν μ€νΈνμΌλ©°
import SignaturePad from 'signature_pad'
μ¬μ©νμ¬ κ°μ Έμ€λ©΄ μλν©λλ€.μλνλμ§, λ¬Έμ κ° μλμ§ λ±μ νΌλλ°±μ λ°λ κ²μ΄ μ’μ΅λλ€.