TypeScript在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
typescript的Promise异步 发布于:2024-05-06 10:37 3.判断是否有重复元素 发布于:2024-04-30 10:09 类实现接口 发布于:2024-04-27 16:28 呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃 发布于:2024-04-23 11:16 Ts中类的基本定义和使用 发布于:2024-04-19 14:02 TS 基础类型 发布于:2024-04-14 13:43 数组排序算法: 冒泡排序 选择排序 插入排序 归并排序 快速排序 链表排序算法: 冒泡排序 选择排序 插入排序 归并排序 快速排序 发布于:2024-04-11 16:43 TypeScript函数 发布于:2024-04-11 14:57 在线TS运行 发布于:2024-03-25 15:54 ts测试运行代码 发布于:2024-03-11 20:07 自定义 new 发布于:2024-01-12 18:02 ts 测试代码 发布于:2024-01-12 17:56 基数排序(TypeScript) 发布于:2023-12-06 21:16 计数排序(TypeScript) 发布于:2023-11-29 20:10 TypeScript 学习 发布于:2023-11-27 19:13 堆排序(TypeScript) 发布于:2023-11-22 21:11 测试测试测试测试测试测试 发布于:2023-11-23 20:58 堆(TypeScript) 发布于:2023-11-22 21:11 数组第k大的值(TypeScript) 发布于:2023-11-14 20:50 快速排序(TypeScript) 发布于:2023-11-14 20:28 实现数组元素的和 发布于:2023-11-09 21:40 实现日期的转换 发布于:2023-11-09 21:33 heap求第k大的值 发布于:2023-11-08 21:09 TS快速排序 发布于:2023-11-08 20:51 快速排序(TypeScript) 发布于:2023-11-08 21:08 ## ts合并对象 1. 扩展运算符合并 2. Object.assign( ) 3. 合并三个对象 发布于:2023-11-08 14:35 求逆序对个数(TypeScript) 发布于:2023-11-06 19:12 归并排序(TypeScript) 发布于:2023-11-06 18:57 数组累加求和(TypeScript) 发布于:2023-10-29 16:19 农民分土地(TypeScript) 发布于:2023-10-29 16:18 农民分土地 发布于:2023-10-25 20:17 判断字符串是否为回文串(TypeScript) 发布于:2023-10-24 15:35 求解斐波那契数列(TypeScript) 发布于:2023-10-24 15:35 求解阶乘(TypeScript) 发布于:2023-10-24 15:35 折半查找算法 发布于:2023-10-15 22:39 插入排序算法 发布于:2023-10-15 22:37 背包问题代码 发布于:2023-09-27 21:03 字符串匹配 发布于:2023-09-27 20:25 选择排序(TypeScript) 发布于:2023-09-20 21:16 学习ts编程代码 发布于:2023-09-16 12:10 阮一峰TS教学 发布于:2023-09-09 11:07 实现 PromiseAll 方法 发布于:2023-08-24 19:20 sleep 返回一个 Promise,并在 ms 毫秒后 Promise 变为完成状态 发布于:2023-08-24 19:14 product 计算数组笛卡尔积 发布于:2023-08-24 19:13 二叉树所有路径 发布于:2023-08-24 19:01 20 到 30之间的数相加 发布于:2023-08-05 09:34 洗牌算法测试 发布于:2023-07-05 15:41 class A{ FirstName:string LastName:string constructor( FirstName:string, LastName:string){ this.FirstName = FirstName this.LastName = LastName } get AllName(){ return this.FirstName+"---"+this.LastName } } const B = new A('张','三') console.log(B); 发布于:2023-07-04 18:40 let int:bigint = Bigint(100) 发布于:2023-07-02 18:19 最新保存数据 发布于:2023-06-28 15:01 [更多]
显示目录

规范



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

规范

普通类型

Number,String,Boolean和Object

不要使用如下类型Number,String,Boolean或Object。 这些类型指的是非原始的装盒对象,它们几乎没在JavaScript代码里正确地使用过。

/* 错误 */
function reverse(s: String): String;

应该使用类型number,string,and boolean。

/* OK */
function reverse(s: string): string;

如果你就要使用Object类型,考虑使用any代替。 目前在TypeScript里无法指定一个对象“不是一个原始值”。

泛型

不要定义一个从来没使用过其类型参数的泛型类型。

回调函数类型

回调函数返回值类型

不要为返回值被忽略的回调函数设置一个any类型的返回值类型:

/* 错误 */
function fn(x: () => any) {
    x();
}

应该给返回值被忽略的回调函数设置void类型的返回值类型:

/* OK */
function fn(x: () => void) {
    x();
}

为什么:使用void相对安全,因为它防止了你不小心使用x的返回值:

function fn(x: () => void) {
    var k = x(); // oops! meant to do something else
    k.doSomething(); // error, but would be OK if the return type had been 'any'
}

回调函数里的可选参数

不要在回调函数里使用可选参数除非你真的要这么做:

/* 错误 */
interface Fetcher {
    getObject(done: (data: any, elapsedTime?: number) => void): void;
}

这里有一种特殊的意义:done回调函数可能以1个参数或2个参数调用。 代码大概的意思是说这个回调函数不在乎是否有 elapsedTime参数, 但是不需要把这个参数当成可选参数来达到此目的 -- 因为总是允许提供一个接收较少参数的回调函数。

应该写出回调函数的非可选参数:

/* OK */
interface Fetcher {
    getObject(done: (data: any, elapsedTime: number) => void): void;
}

重载与回调函数

不要因为回调函数参数个数不同而写不同的重载:

/* 错误 */
declare function beforeAll(action: () => void, timeout?: number): void;
declare function beforeAll(action: (done: DoneFn) => void, timeout?: number): void;

应该只使用最大参数个数写一个重载:

/* OK */
declare function beforeAll(action: (done: DoneFn) => void, timeout?: number): void;

为什么:回调函数总是可以忽略某个参数的,因此没必要为参数少的情况写重载。 参数少的回调函数首先允许错误类型的函数被传入,因为它们匹配第一个重载。

函数重载

顺序

不要把一般的重载放在精确的重载前面:

/* 错误 */
declare function fn(x: any): any;
declare function fn(x: HTMLElement): number;
declare function fn(x: HTMLDivElement): string;

var myElem: HTMLDivElement;
var x = fn(myElem); // x: any, wat?

应该排序重载令精确的排在一般的之前:

/* OK */
declare function fn(x: HTMLDivElement): string;
declare function fn(x: HTMLElement): number;
declare function fn(x: any): any;

var myElem: HTMLDivElement;
var x = fn(myElem); // x: string, :)

为什么:TypeScript会选择第一个匹配到的重载当解析函数调用的时候。 当前面的重载比后面的“普通”,那么后面的被隐藏了不会被调用。

使用可选参数

不要为仅在末尾参数不同时写不同的重载:

/* 错误 */
interface Example {
    diff(one: string): number;
    diff(one: string, two: string): number;
    diff(one: string, two: string, three: boolean): number;
}

应该尽可能使用可选参数:

/* OK */
interface Example {
    diff(one: string, two?: string, three?: boolean): number;
}

注意这在所有重载都有相同类型的返回值时会不好用。

为什么:有两种生要的原因。

TypeScript解析签名兼容性时会查看是否某个目标签名能够使用源的参数调用, 且允许外来参数。 下面的代码暴露出一个bug,当签名被正确的使用可选参数书写时:

function fn(x: (a: string, b: number, c: number) => void) { }
var x: Example;
// When written with overloads, OK -- used first overload
// When written with optionals, correctly an error
fn(x.diff);

第二个原因是当使用了TypeScript“严格检查null”特性时。 因为没有指定的参数在JavaScript里表示为undefined,通常显示地为可选参数传入一个undefined。 这段代码在严格null模式下可以工作:

var x: Example;
// When written with overloads, incorrectly an error because of passing 'undefined' to 'string'
// When written with optionals, correctly OK
x.diff("something", true ? undefined : "hour");

使用联合类型

不要为仅在某个位置上的参数类型不同的情况下定义重载:

/* WRONG */
interface Moment {
    utcOffset(): number;
    utcOffset(b: number): Moment;
    utcOffset(b: string): Moment;
}

应该尽可能使用类型类型:

/* OK */
interface Moment {
    utcOffset(): number;
    utcOffset(b: number|string): Moment;
}

注意我们没有让b成为可选的,因为签名的返回值类型不同。

为什么:这对于那些正在将值“传递”到您的函数的人来说非常重要:

function fn(x: string): void;
function fn(x: number): void;
function fn(x: number|string) {
    // When written with separate overloads, incorrectly an error
    // When written with union types, correctly OK
    return moment().utcOffset(x);
}
由JSRUN为你提供的TypeScript在线运行、在线编译工具
        JSRUN提供的TypeScript 在线运行,TypeScript 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout