用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/microwind/ai-skills --skill typescript命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | TypeScript编程 |
| description | 当使用TypeScript编程时,分析类型系统,优化代码结构,解决类型安全问题。验证类型设计,构建大型应用,和最佳实践。 |
| license | MIT |
TypeScript是JavaScript的超集,添加了静态类型检查、类、接口、泛型等特性。TypeScript通过编译时类型检查提高了代码的可维护性和开发效率,特别适合构建大型、复杂的前端和后端应用。不当的TypeScript使用会导致类型冗余、编译错误、开发效率降低。
核心原则: 好的TypeScript代码应该类型安全、结构清晰、可维护性强、开发效率高。坏的TypeScript代码会过度类型化、类型滥用、编译复杂。
始终:
触发短语:
问题: 类型过于复杂
原因: 过度使用高级类型
解决: 简化类型定义,使用类型别名
问题: 类型推断失败
原因: 类型信息不足
解决: 添加类型注解,使用类型断言
问题: 编译速度慢
原因: 项目规模大,配置不当
解决: 优化tsconfig配置,使用增量编译
问题: 类型检查过于严格
原因: 编译选项设置不当
解决: 调整strict相关选项
// 基础类型
let isDone: boolean = false;
let decimal: number = 6;
let color: string = "blue";
let list: number[] = [1, 2, 3];
let x: [string, number] = ["hello", 10];
// 枚举
enum Color {
Red,
Green,
Blue
}
let c: Color = Color.Green;
// any和unknown
let notSure: any = 4;
let value: unknown = 4;
// void和never
function warnUser(): void {
console.log("This is a warning message");
}
function error(message: ): {
(message);
}
{
: ;
: ;
?: ;
: ;
}
{
(: , : ): ;
}
: = () {
source.(subString) > -;
};
{
[: ]: ;
}
: = [, ];
: = myArray[];
{
: ;
() {
. = firstName + + middleInitial + + lastName;
}
}
{
: ;
: ;
}
() {
+ person. + + person.;
}
user = (, , );
.((user));
// 泛型函数
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString");
let output2 = identity<number>(100);
// 泛型约束
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length);
return arg;
}
loggingIdentity({length: 10, value: 3});
// 泛型类
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };
// 泛型接口
interface Box<T> {
contents: T;
}
let box: <> = {
:
};
<T> = T ? : ;
= <>;
= <>;
<T> = {
[P keyof T]: T[P]
};
<T> = {
[P keyof T]?: T[P]
};
{
: ;
: ;
}
= <>;
= <>;
<T> = {
[P keyof T]-?: T[P]
};
<T, K keyof T> = {
[P K]: T[P]
};
<T, K keyof T> = <T, <keyof T, K>>;
= <>;
= <>;
= <, >;
= <, >;
// 联合类型和交叉类型
type UnionType = string | number;
type IntersectionType = Person & Student;
// 字面量类型
type Direction = "North" | "South" | "East" | "West";
// 函数重载
function padLeft(value: string, padding: string): string;
function padLeft(value: string, padding: number): string;
function padLeft(value: string, padding: string | number): string {
if (typeof padding === "number") {
return Array(padding + 1).join(" ") + value;
}
if (typeof padding === "string") {
return padding + value;
}
throw ();
}
(): value is {
value === ;
}
() {
((value)) {
.(value.());
}
}
: = ;
: = (someValue ).;
(): {
name!;
}
{
: ;
: ;
}
{
: ;
: ;
: ;
}
{
: ;
: ;
}
= | | ;
(): {
(s.) {
: s. * s.;
: s. * s.;
: . * s. ** ;
}
}
{
: T;
: | ;
}
<T > = ;
= <>;
= keyof ;
= [];
= T | ? : T;
= | ;
= <>;
// 类装饰器
function sealed(constructor: Function) {
Object.seal(constructor);
Object.seal(constructor.prototype);
}
@sealed
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
// 方法装饰器
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
class Greeter2 {
greeting: string;
constructor(message: string) {
this. = message;
}
()
() {
+ .;
}
}
() {
() {
originalMethod = descriptor.;
descriptor. = () {
result = originalMethod.(, args);
;
};
};
}
{
: ;
() {
. = name;
}
()
(): {
.;
}
}
() {
.();
}
{
: ;
() {
. = greeting;
}
}
() {
: ;
= () => {
value;
};
= () => {
value = newVal.();
};
.(target, propertyKey, {
: getter,
: setter,
: ,
:
});
}
{
: ;
() {
. = title;
}
}
product = ();
.(product.);
product. = ;
.(product.);
// 模块导出
// math.ts
export function add(x: number, y: number): number {
return x + y;
}
export function subtract(x: number, y: number): number {
return x - y;
}
export default function multiply(x: number, y: number): number {
return x * y;
}
// 模块导入
import { add, subtract } from './math';
import multiply from './math';
let result = add(5, 3);
let result2 = multiply(4, 5);
// 命名空间
namespace Validation {
export interface StringValidator {
isAcceptable(s: ): ;
}
lettersRegexp = ;
{
() {
lettersRegexp.(s);
}
}
numberRegexp = ;
{
() {
s. === && numberRegexp.(s);
}
}
}
strings = [, , ];
: { [: ]: . } = {};
validators[] = .();
validators[] = .();
validators[] = .();
( s strings) {
.();
}
{
: ;
: ;
}
{
: ;
}
: = {
: ,
: ,
:
};
{
: = ;
() {
. = ;
}
}
{
: = ;
() {
. = ;
}
() {
. = ;
}
}
mix<T , U >(: T, : U): T & U {
base {
() {
(...args);
.(, ());
}
};
}
{
() {}
}
, {
}
= (, );
// API响应类型定义
interface ApiResponse<T> {
data: T;
message: string;
success: boolean;
}
interface User {
id: number;
name: string;
email: string;
avatar?: string;
}
// 服务类
class UserService {
private baseUrl: string;
constructor(baseUrl: string) {
this.baseUrl = baseUrl;
}
async getUser(id: number): Promise<ApiResponse<User>> {
const response = await fetch(`${this.baseUrl}/users/${id}`);
const data = await response.json();
return {
data: data,
message: "User fetched successfully",
success:
};
}
(: <, >): <<>> {
response = (, {
: ,
: {
:
},
: .(userData)
});
data = response.();
{
: data,
: ,
:
};
}
(: , : <>): <<>> {
response = (, {
: ,
: {
:
},
: .(updates)
});
data = response.();
{
: data,
: ,
:
};
}
}
= {
: | ;
: ;
: | ;
};
=
| { : ; : }
| { : ; : }
| { : ; : }
| { : };
(): {
(action.) {
:
{ ...state, : action., : , : };
:
{ ...state, : action. };
:
{ ...state, : action., : };
:
{ ...state, : };
:
state;
}
}
<T = > {
: T;
?: ;
: ;
}
{
: <>;
: <>;
: <>;
}
<T> = | ;
{
: <>;
: <>;
: <>;
}
: = {
: {
emailRegex = ;
emailRegex.(email) ? : ;
},
: {
password. >= ? : ;
},
:
};
<T <, >> {
: T;
: <<keyof T, >> = {};
() {
. = { ...initialData };
}
setValidator<K keyof T>(: K, : <T[K][]>) {
.[field] = validator;
}
setValue<K keyof T>(: K, : T[K][]) {
.[field] = {
....[field],
value,
:
};
.(field);
}
validateField<K keyof T>(: K): | {
validator = .[field];
(!validator) ;
error = (.[field].);
.[field] = {
....[field],
error
};
error;
}
(): {
isValid = ;
( field .) {
error = .(field keyof T);
(error) isValid = ;
}
isValid;
}
(): T {
.;
}
}
: = {
: { : , : },
: { : , : },
: { : , : }
};
formHandler = (initialLoginForm);
formHandler.(, validators.);
formHandler.(, validators.);
formHandler.(, validators.);
formHandler.(, );
formHandler.(, );
formHandler.(, );
isValid = formHandler.();
formData = formHandler.();