您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Register a function to generate runtime window type definitions.
- // ==UserScript==
- // @name Detect Types
- // @namespace https://github.com/SlashNephy
- // @version 0.1.0
- // @author SlashNephy
- // @description Register a function to generate runtime window type definitions.
- // @description:ja window の型定義を生成する関数を登録します。
- // @homepage https://scrapbox.io/slashnephy
- // @homepageURL https://scrapbox.io/slashnephy
- // @icon https://www.google.com/s2/favicons?sz=64&domain=*
- // @supportURL https://github.com/SlashNephy/userscripts/issues
- // @match https://*/*
- // @grant unsafeWindow
- // @license MIT license
- // ==/UserScript==
- (function () {
- 'use strict';
- const escapeKey = (key) => {
- if (key.includes('.')) {
- return `'${key}'`;
- }
- return key;
- };
- const getTypeString = (value) => {
- if (value === null) {
- return 'null';
- }
- if (Array.isArray(value)) {
- if (value.length === 0) {
- return 'unknown[]';
- }
- const types = Array.from(new Set(value.map(getTypeString)));
- if (types.length > 1) {
- return `(${types.join(' | ')})[]`;
- }
- return `${types.at(0)}[]`;
- }
- switch (typeof value) {
- case 'object': {
- const entries = Object.entries(value);
- if (entries.length === 0) {
- return 'Record<string, unknown>';
- }
- return `{${entries.map(([k, v]) => `${escapeKey(k)}: ${getTypeString(v)}`).join(', ')}}`;
- }
- case 'function':
- return 'Function';
- default:
- return typeof value;
- }
- };
- unsafeWindow.getTypeString = getTypeString;
- unsafeWindow.printTypeString = (value) => {
- console.log(getTypeString(value));
- };
- })();