vue2-typescript-standards
4
总安装量
3
周安装量
#53909
全站排名
安装命令
npx skills add https://github.com/levai/zl-skills --skill vue2-typescript-standards
Agent 安装分布
cursor
2
github-copilot
2
mcpjam
1
claude-code
1
windsurf
1
zencoder
1
Skill 文档
TypeScript ç¼ç è§è
使¶ä½¿ç¨
å½éè¦ç¼åæä¿®æ¹ TypeScript ä»£ç æ¶ä½¿ç¨æ¤è§èï¼ç¹å«æ¯ï¼
- å®ä¹ç±»åæ¥å£åç±»åå«å
- 使ç¨è£ 饰卿¨¡å¼
- ç¼åå·¥å ·å½æ°
- å¤çç±»åå¯¼å ¥å导åº
ç±»åå®ä¹
åºæ¬ç±»å
// â
GOOD - æç¡®ç±»å
const modelName: string = 'test'
const count: number = 0
const isEdit: boolean = false
// â BAD - ä½¿ç¨ any
const data: any = {}
æ¥å£ä¸ç±»åå«å
// â
GOOD - ä½¿ç¨æ¥å£å®ä¹å¯¹è±¡ç»æ
interface IDataModel {
id: number
name: string
status: 'active' | 'inactive'
}
// â
GOOD - 使ç¨ç±»åå«å
type Kv = Record<string, any>
type IGenericAction<T, R> = (params: T) => Promise<R>
æ³å使ç¨
// â
GOOD - ä½¿ç¨æ³åæé«å¤ç¨æ§
export default class AbsDataModelView <T = any> extends Vue {
model: T | null = null
}
// â
GOOD - 彿°æ³å
function fetchData<T>(url: string): Promise<T> {
return http.get<T>(url)
}
è£ é¥°å¨æ¨¡å¼
ç±»è£ é¥°å¨
// â
GOOD
@Component
@StoreProvide([store])
export default class AbsDataModelView extends Vue {
// ...
}
æ¹æ³è£ 饰å¨
// â
GOOD - Vuex Action
@$store.Action('fetchDataModelPageList')
fetchDataModelPageList!: IGenericAction<IListParams, IListResult<IDataModelResultItem[]>>
// â
GOOD - Vuex State
@$store.State('dataModelList')
dataModelList!: IDataModelResultItem[]
å·¥å ·å½æ°
彿°å¯¼åº
// â
GOOD - å½å导åº
export const genRequired = (message?: string): IValidateRuleItem => {
// ...
}
export const getRule = (type: string, message?: string): IValidateRuleItem => {
// ...
}
// â
GOOD - é»è®¤å¯¼åº
export default class BaseWidget extends Vue {
// ...
}
彿°åæ°
// â
GOOD - å¯éåæ°ä½¿ç¨ ?
function validate (rule: any, value: string, callback: Function): void {
// ...
}
// â
GOOD - é»è®¤åæ°
function createValidator (fn: (value: any) => boolean, message: string = 'éªè¯å¤±è´¥') {
// ...
}
å½åè§è
- ç±»/æ¥å£/ç±»åï¼PascalCaseï¼å¦
AbsDataModelView,IDataModelï¼ - åé/彿°ï¼camelCaseï¼å¦
modelName,fetchData()ï¼ - 常éï¼UPPER_SNAKE_CASEï¼å¦
MAX_LENGTH,API_BASE_URLï¼ - ç§ææåï¼camelCaseï¼åç¼
_ï¼å¦_internalStateï¼
å¯¼å ¥è§è
å¯¼å ¥é¡ºåº
// 1. Vue ç¸å
³
import { Component, Vue } from 'vue-property-decorator'
import { namespace } from 'vuex-class'
// 2. ç¬¬ä¸æ¹åº
import { isObject, assign } from '@tdio/utils'
// 3. 项ç®å·¥å
·
import { getRule, genRequired } from '@/utils/validator'
import { $t } from '@/lang'
// 4. ç±»åå®ä¹
import type { IDataModel } from '../types/dataModel'
// 5. ç»ä»¶/è§å¾
import AbsWorkbenchView from '../../AbsView/AbsWorkbenchView'
ç±»åå¯¼å ¥
// â
GOOD - ä½¿ç¨ type å
³é®å
import type {
IDataModelResultItem,
IDataTypeItem
} from '../types/dataModel'
// â
GOOD - æ··å导å
¥
import { Component } from 'vue-property-decorator'
import type { Vue } from 'vue'
é误å¤ç
// â
GOOD - æç¡®çé误类å
try {
await fetchData()
} catch (error) {
console.error('Failed to fetch data:', error)
throw new Error('æ°æ®è·å失败')
}
// â BAD - 忽ç¥é误
try {
await fetchData()
} catch (e) {}
æä½³å®è·µ
- é¿å
anyï¼å°½é使ç¨å
·ä½ç±»åï¼å¿
è¦æ¶ä½¿ç¨
unknown - ç±»åæ¨æï¼å åå©ç¨ TypeScript ç±»åæ¨æ
- ä¸¥æ ¼æ¨¡å¼ï¼å¯ç¨ä¸¥æ ¼ç±»åæ£æ¥
- ç±»åå®å«ï¼ä½¿ç¨ç±»åå®å«ç¼©å°ç±»åèå´
- 注éï¼å¤æç±»åæé»è¾åºæ·»å 注é说æ