npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ts-type-predicates

v1.0.13

Published

使用斷言(assert)讓類型斷言(type predicates)運作的實用工具函式 | Use asserts to make type predicates work with better runtime validation

Readme

ts-type-predicates

使用斷言(assert)讓類型斷言(type predicates)運作的實用工具函式

Use asserts to make type predicates work with better runtime validation


功能特點 / Features

  • 結合 TypeScript 斷言函式與類型斷言功能
  • Combine TypeScript assertion functions with type predicate functionality
  • 支援運行時驗證與編譯時類型縮小
  • Support runtime validation and compile-time type narrowing
  • 可自訂錯誤訊息
  • Customizable error messages
  • 可選擇只做類型收窄不拋出錯誤
  • Optional type narrowing without throwing errors
  • 可用於強化替代 Narrowing
  • Can be used to enhance or replace Narrowing

安裝 / Install

yarn add ts-type-predicates
yarn-tool add ts-type-predicates
yt add ts-type-predicates

使用範例 / Usage Examples

基本用法

import { typePredicates, typeNarrowed } from 'ts-type-predicates';

// 使用斷言函式 - 失敗時拋出錯誤
function processValue(value: string | number) {
    typePredicates<string>(value, typeof value === 'string');
    // 現在 TypeScript 知道 value 是 string
    console.log(value.toUpperCase());
}

// 使用類型收窄 - 回傳布林值
function checkValue(value: unknown) {
    if (typeNarrowed<string>(value, typeof value === 'string')) {
        console.log(value.length);
    }
}

參數省略

參數除了第一個以外都能省略:

import { typePredicates } from 'ts-type-predicates';

// 只有第一個參數是必需的
typePredicates<string>(value);

強化替代 Narrowing

當標準的 Narrowing 無法正確收窄類型時,可以使用 typePredicates 強制收窄:

import { typePredicates } from 'ts-type-predicates';

// Narrowing 無法處理的情況
type Mixed = { type: 'a'; value: string } | { type: 'b'; value: number };

function process(data: Mixed) {
    // ❌ Narrowing 無法正確收窄 value 的類型
    if (data.type === 'a') {
        // data.value 仍然是 string | number
        console.log(data.value.toUpperCase()); // 錯誤
    }

    // ✅ 使用 typePredicates 強制收窄 - 更精簡的寫法 (需要配合使用 @ts-ignore 註釋)
    if (typePredicates<string>(data.value, data.type === 'a')) {
        // data.value 現在正確收窄為 string
        console.log(data.value.toUpperCase()); // 正確
    }
}

忽略表達式結果

當只需要類型收窄,不需要運行時驗證時:

import { typePredicates } from 'ts-type-predicates';

// 只做類型收窄,不拋出錯誤
function narrowValue(value: unknown) {
    typePredicates<string>(value, typeof value === 'string', undefined, true);
    // value 現在被收窄為 string(但運行時不驗證)
    console.log(value.toUpperCase());
}

與標準 Narrowing 的比較

| 特性 | Narrowing(內建) | typePredicates | |------|-------------------|----------------| | 語法 | if (typeof x === "string") | typePredicates<string>(x) | | 彈性 | 有限 | 可自訂任意邏輯 | | 錯誤處理 | 無 | 可拋出自訂錯誤 | | 強制收窄 | 無法 | 可以 | | 複雜類型 | 需多重檢查 | 可一次完成 |


相關資源