Vue CLI plugin that adds comprehensive TypeScript support to Vue.js projects with webpack configuration, project scaffolding, and build optimization.
—
Utilities for converting JavaScript files to TypeScript during project setup with configurable conversion strategies.
Main conversion function that handles JavaScript to TypeScript file conversion.
/**
* Converts JavaScript files to TypeScript during project generation
* Handles file renaming and content preservation with configurable strategies
* @param api - Generator API instance providing file manipulation methods
* @param options - Conversion configuration options
*/
function convert(api, options: ConvertOptions = {}): void;
interface ConvertOptions {
convertJsToTs?: boolean; // Convert all .js files to .ts (default: true)
}Usage Example:
// Used internally by the generator module
const convert = require('@vue/cli-plugin-typescript/generator/convert');
// Applied during project generation
convert(api, { convertJsToTs: true });Post-processing logic for handling JavaScript to TypeScript conversion:
/**
* File processing logic applied after template rendering
* Uses api.postProcessFiles to modify generated file structure
* @param files - File object containing generated files
*/
api.postProcessFiles((files) => {
// Conversion logic applied here
});When convertJsToTs is true (default), converts all applicable JavaScript files:
/**
* Full conversion mode configuration
* Converts all .js files to .ts except excluded patterns
*/
const fullConversionConfig = {
jsRE: /\.js$/, // Matches .js files
excludeRE: /^tests\/e2e\/|(\.config|rc)\.js$/, // Default exclusions
// Modified exclusions when e2e-webdriverio plugin is present
webdriverioExcludeRE: /(\.config|rc)\.js$/
};Full Conversion Process:
.js files in the project.js file, create corresponding .ts file with same content.ts file already exists, prioritize existing .ts file.js file after successful conversionWhen convertJsToTs is false, only converts the main entry file:
/**
* Selective conversion mode configuration
* Only converts the main application entry file to TypeScript
*/
const selectiveConversionConfig = {
entryFile: api.entryFile, // Main entry file (usually src/main.js)
targetFile: string // Converted .ts version of entry file
};Selective Conversion Process:
src/main.js)src/main.ts)Regular expressions for excluding files from conversion:
/**
* File exclusion pattern configuration
* Defines which files should not be converted to TypeScript
*/
const exclusionPatterns = {
// Default exclusions
default: /^tests\/e2e\/|(\.config|rc)\.js$/,
// WebDriverIO specific exclusions (less restrictive)
webdriverio: /(\.config|rc)\.js$/
};Excluded File Types:
*.config.js, *rc.jstests/e2e/**/*.js (unless using WebDriverIO)Content handling during conversion process:
/**
* File content preservation during conversion
* Ensures no content is lost during .js to .ts conversion
*/
const contentPreservation = {
sourceContent: files[jsFile], // Original JavaScript content
targetContent: files[tsFile], // Existing TypeScript content (if any)
// Priority: existing .ts file > converted .js file content
finalContent: files[tsFile] || files[jsFile]
};E2E testing plugin integration affecting conversion behavior:
/**
* Plugin integration affecting file conversion behavior
* Different exclusion patterns based on installed plugins
*/
if (api.hasPlugin('e2e-webdriverio')) {
// Use less restrictive exclusion pattern
// Allows WebDriverIO test files to be converted to TypeScript
excludeRE = /(\.config|rc)\.js$/;
} else {
// Use default exclusion pattern
// Excludes all e2e test files from conversion
excludeRE = /^tests\/e2e\/|(\.config|rc)\.js$/;
}Full Conversion Example:
// Before conversion (project files)
files = {
'src/main.js': 'import Vue from "vue"...',
'src/components/HelloWorld.js': 'export default {...}',
'vue.config.js': 'module.exports = {...}',
'tests/e2e/specs/test.js': 'describe(...)'
};
// After conversion (convertJsToTs: true)
files = {
'src/main.ts': 'import Vue from "vue"...',
'src/components/HelloWorld.ts': 'export default {...}',
'vue.config.js': 'module.exports = {...}', // Excluded
'tests/e2e/specs/test.js': 'describe(...)' // Excluded
};Selective Conversion Example:
// Before conversion (project files)
files = {
'src/main.js': 'import Vue from "vue"...',
'src/components/HelloWorld.js': 'export default {...}',
'src/utils/helpers.js': 'export function helper() {...}'
};
// After conversion (convertJsToTs: false)
files = {
'src/main.ts': 'import Vue from "vue"...', // Converted
'src/components/HelloWorld.js': 'export default {...}', // Unchanged
'src/utils/helpers.js': 'export function helper() {...}' // Unchanged
};Conflict Resolution:
// When both .js and .ts files exist
files = {
'src/component.js': '// JavaScript version',
'src/component.ts': '// TypeScript version (existing)'
};
// Result: TypeScript version is preserved
files = {
'src/component.ts': '// TypeScript version (existing)'
// JavaScript version is removed
};Install with Tessl CLI
npx tessl i tessl/npm-vue--cli-plugin-typescript