@yKicchan
知ってた人は...
TypeScript で開発していて
.filter(Boolean)
const array = [1, 2, null, 4, undefined, 6, 7]; const filteredArray = array.filter(Boolean); // filteredArray: (number | null | undefined)[]
TypeScript v5.5 以降では解消済み
.includes()
const array = [1, 2, 3] as const; array.includes(4); // ^^^ // Argument of type 'number' is not assignable to // parameter of type '1 | 2 | 3'.
export const MyType = { Hoge: 1, Fuga: 2, } as const; export type MyType = typeof MyType[keyof typeof MyType]; export function isMyType(v: number): v is MyType { return Object.values(MyType).includes(v); // ^^^ // Argument of type 'number' is not assignable to // parameter of type '1 | 2'. }
any
const obj = JSON.perse('{}'); // obj: any fetch('/') .then((res) => res.json()) .then((json) => { console.log(json); // json: any });
そのつらみ
ts-reset
A 'CSS reset' for TypeScript, improving types for common JavaScript API's
TypeScript用の「CSSリセット」、一般的なJavaScript APIの型を改善するもの。
$ npm i -D @total-typescript/ts-reset
アプリケーションでの利用とし、ライブラリで使用しないこと。 グローバルにリセットされユーザーが知らずに利用するハメになる。
import "@total-typescript/ts-reset";
tsconfig.json で moduleResolution が NodeNext, Node16, Bundler のいずれかが必要。
tsconfig.json
moduleResolution
NodeNext
Node16
Bundler
const array = [1, 2, null, 4, undefined, 6, 7]; const filteredArray = array.filter(Boolean); // filteredArray: number[]
const array = [1, 2, 3] as const; array.includes(4); // false
export const MyType = { Hoge: 1, Fuga: 2, } as const; export type MyType = typeof MyType[keyof typeof MyType]; export function isMyType(v: number): v is MyType { return Object.values(MyType).includes(v); // エラーなし }
unknown
const obj = JSON.perse('{}'); // obj: unknown fetch('/') .then((res) => res.json()) .then((json) => { console.log(json); // json: unknown });
import '@total-typescript/ts-reset/array-includes'; import '@total-typescript/ts-reset/filter-boolean';
ルールの一覧は公式サイトへ
ADR 書こう