一键导入
deno-typescript
Guidelines for developing with Deno and TypeScript using modern runtime features, security model, and native tooling
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Guidelines for developing with Deno and TypeScript using modern runtime features, security model, and native tooling
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Expert-level Deno knowledge for code review, debugging, and best practice enforcement. Use when reviewing Deno code or answering advanced Deno questions.
Use when starting any Deno project, choosing packages, configuring deno.json, or running CLI commands. Provides foundational knowledge for building modern Deno applications.
| name | deno-typescript |
| description | Guidelines for developing with Deno and TypeScript using modern runtime features, security model, and native tooling |
You are an expert in Deno and TypeScript development with deep knowledge of building secure, modern applications using Deno's native TypeScript support and built-in tooling.
any type - create necessary types insteadisLoading, hasError, canDeleteas constreadonly for immutable propertiessrc/
routes/
{resource}/
mod.ts
handlers.ts
validators.ts
middleware/
auth.ts
logger.ts
services/
{domain}_service.ts
types/
mod.ts
utils/
mod.ts
deps.ts
main.ts
deno.json
deps.ts pattern for centralized dependency managementdeno.json// deps.ts - centralized dependencies
export { serve } from "https://deno.land/std@0.208.0/http/server.ts";
export { z } from "https://deno.land/x/zod@v3.22.4/mod.ts";
// Using import maps in deno.json
{
"imports": {
"std/": "https://deno.land/std@0.208.0/",
"hono": "https://deno.land/x/hono@v3.11.7/mod.ts"
}
}
Deno is secure by default. Request only necessary permissions:
# Run with specific permissions
deno run --allow-net --allow-read=./data --allow-env main.ts
# Permission flags
--allow-net=example.com # Network access to specific domains
--allow-read=./path # File read access
--allow-write=./path # File write access
--allow-env=API_KEY # Environment variable access
--allow-run=cmd # Subprocess execution
// Programmatic permission requests
const status = await Deno.permissions.request({ name: 'net', host: 'api.example.com' })
if (status.state === 'granted') {
// Network access granted
}
// Simple HTTP server
Deno.serve({ port: 8000 }, (req) => {
const url = new URL(req.url)
if (url.pathname === '/api/users' && req.method === 'GET') {
return Response.json({ users: [] })
}
return new Response('Not Found', { status: 404 })
})
import { Hono } from 'https://deno.land/x/hono/mod.ts'
const app = new Hono()
app.get('/', (c) => c.text('Hello Deno!'))
app.get('/api/users', (c) => c.json({ users: [] }))
Deno.serve(app.fetch)
// routes/index.tsx
import { PageProps } from "$fresh/server.ts";
export default function Home(props: PageProps) {
return (
<div>
<h1>Welcome to Fresh</h1>
</div>
);
}
// routes/api/users.ts
import { Handlers } from "$fresh/server.ts";
export const handler: Handlers = {
async GET(_req, _ctx) {
const users = await getUsers();
return Response.json(users);
},
};
// Using Deno KV (built-in key-value store)
const kv = await Deno.openKv()
// Set a value
await kv.set(['users', '1'], { name: 'John', email: 'john@example.com' })
// Get a value
const result = await kv.get(['users', '1'])
console.log(result.value)
// List values
const entries = kv.list({ prefix: ['users'] })
for await (const entry of entries) {
console.log(entry.key, entry.value)
}
// Access environment variables (requires --allow-env)
const apiKey = Deno.env.get('API_KEY')
// Using dotenv
import { load } from 'https://deno.land/std/dotenv/mod.ts'
const env = await load()
// user_test.ts
import { assertEquals, assertRejects } from 'https://deno.land/std/assert/mod.ts'
import { describe, it, beforeEach } from 'https://deno.land/std/testing/bdd.ts'
import { getUser, createUser } from './user_service.ts'
describe('User Service', () => {
beforeEach(() => {
// Setup
})
it('should create a user', async () => {
const user = await createUser({ name: 'John', email: 'john@example.com' })
assertEquals(user.name, 'John')
})
it('should throw for invalid email', async () => {
await assertRejects(
() => createUser({ name: 'John', email: 'invalid' }),
Error,
'Invalid email'
)
})
})
// Run tests
// deno test --allow-net --allow-read
# Formatting
deno fmt
# Linting
deno lint
# Type checking
deno check main.ts
# Bundle
deno bundle main.ts bundle.js
# Compile to executable
deno compile --allow-net main.ts
# Documentation generation
deno doc main.ts
# Dependency inspection
deno info main.ts
{
"tasks": {
"dev": "deno run --watch --allow-net --allow-env main.ts",
"start": "deno run --allow-net --allow-env main.ts",
"test": "deno test --allow-net",
"lint": "deno lint",
"fmt": "deno fmt"
},
"imports": {
"std/": "https://deno.land/std@0.208.0/",
"@/": "./src/"
},
"compilerOptions": {
"strict": true,
"lib": ["deno.window"]
},
"lint": {
"rules": {
"tags": ["recommended"]
}
},
"fmt": {
"indentWidth": 2,
"singleQuote": true
}
}
class AppError extends Error {
constructor(
message: string,
public statusCode: number = 500,
public code: string = 'INTERNAL_ERROR'
) {
super(message)
this.name = 'AppError'
}
}
const handleRequest = async (req: Request): Promise<Response> => {
try {
return await processRequest(req)
} catch (error) {
if (error instanceof AppError) {
return Response.json({ error: error.message, code: error.code }, { status: error.statusCode })
}
console.error(error)
return Response.json({ error: 'Internal Server Error' }, { status: 500 })
}
}
Deno embraces web standards. Use:
fetch() for HTTP requestsRequest and Response objectsURL and URLSearchParamsWeb Crypto API for cryptographyStreams API for data streamingFormData for multipart dataDeno.serve for high-performance HTTP