void类型表示没有类型,通常用于函数没有返回值的情况。
function log(message: string): void {
console.log(message)
}
log("hello") // 输出: hello
void 表示函数不返回任何值:
function greet(name: string): void {
console.log(`你好,${name}`)
// 没有返回语句
}
function doNothing(): void {
return // 空返回
}
声明 void 类型变量没有实际意义:
let unusable: void = undefined
unusable = null // 严格模式下报错
unusable = "hello" // 错误
function returnsVoid(): void {
console.log("hello")
}
function returnsUndefined(): undefined {
console.log("hello")
return undefined
}
let result1 = returnsVoid() // void
let result2 = returnsUndefined() // undefined
void 常用于回调函数类型:
type Callback = (data: string) => void
function processData(data: string, callback: Callback): void {
callback(data)
}
processData("hello", (data) => {
console.log(data)
})
function addClickListener(element: HTMLElement, handler: () => void): void {
element.addEventListener("click", handler)
}
addClickListener(document.body!, () => {
console.log("clicked")
})
function delay(ms: number, callback: () => void): void {
setTimeout(callback, ms)
}
delay(1000, () => {
console.log("1秒后执行")
})
class StringBuilder {
private value: string = ""
append(str: string): this {
this.value += str
return this
}
clear(): void {
this.value = ""
}
toString(): string {
return this.value
}
}
const builder = new StringBuilder()
builder.append("hello").append(" world")
console.log(builder.toString()) // "hello world"
builder.clear()
interface Logger {
log(message: string): void
error(message: string): void
}
class ConsoleLogger implements Logger {
log(message: string): void {
console.log(`[LOG] ${message}`)
}
error(message: string): void {
console.error(`[ERROR] ${message}`)
}
}
async function asyncLog(message: string): Promise<void> {
console.log(message)
}
asyncLog("hello") // Promise<void>
| 类型 | 说明 |
|---|---|
| void | 函数正常结束,没有返回值 |
| never | 函数永不返回 |
function logMessage(): void {
console.log("hello")
}
function throwError(): never {
throw new Error("error")
}
function infiniteLoop(): never {
while (true) {}
}
function returnsValue(): number {
return 42
}
function takesVoid(callback: () => void): void {
callback()
}
// 正确:返回值被忽略
takesVoid(returnsValue)
let v: void = undefined // 正确
let n: void = null // 严格模式下错误
function log(message: string) {
console.log(message)
}
// 返回值类型推断为 void
interface Result<T> {
data: T
error: string | null
}
function fetchData<T>(callback: (result: Result<T>) => void): void {
// ...
}
fetchData<{ name: string }>((result) => {
console.log(result.data.name)
})