WEB前端开发社区 今天
// test.js
let foo = 1;
foo.split(' ');
// TypeError: foo.split is not a function 运行时会报错(foo.split 不是一个函数)
// test.ts
let foo: number = 1;
foo.split(' ');
// Property 'split' does not exist on type 'number'. 编译时报错(数字没有 split 方法),无法通过编译
console.log(1 + '1'); // 11
let flag: boolean = false
let num: number = 15
let str: string = 'abc'
var a: null = null
var b: undefined = undefined
// 编译通过
let flag:boolean=new Boolean(false) // Type 'Boolean' is not assignable to type 'boolean'.
let num: number = new Number(15) // Type 'Number' is not assignable to type 'number'.
let str: string = new String('abc') // Type 'String' is not assignable to type 'string'.
// 编译通过
let flag: boolean = Boolean(false)
let num : number = Number(15)
let str : string = String('abc')
// 编译通过
let decLiteral: number = 6;let hexLiteral: number = 0xf00d;let binaryLiteral: number = 0b1010; // ES6 中的二进制表示法let octalLiteral: number = 0o744; // ES6 中的八进制表示法let notANumber: number = NaN;let infinityNumber: number = Infinity;
var decLiteral = 6;var hexLiteral = 0xf00d;var binaryLiteral = 10; // ES6 中的二进制表示法var octalLiteral = 484; // ES6 中的八进制表示法var notANumber = NaN;var infinityNumber = Infinity;
let myName: string = 'Echoyya';let str: string = `Hello, my name is ${myName}.`; // 模板字符串
var myName = 'Echoyya';var str = "Hello, my name is " + myName + "."; // 模板字符串
function alertName(): void { alert('My name is Tom');}
let unusable: void = undefined;
let u: undefined = undefined;let n: null = null;
let num: number = undefined;
let u: undefined;
let str: string = u;
let vo: void= u;
// 编译通过
let u: void;let num: number = u; // Type 'void' is not assignable to type 'number'.let vo: void = u; // 编译通过
let str: string = 'abc';
str = 123;
// Type 'number' is not assignable to type 'string'.
// -----------------------------------------------------------------
let str: any = 'abc';
str = 123;
// 编译通过
let anyThing: any = 'hello';
anyThing.setName('Jerry');
anyThing.setName('Jerry').sayHello();
anyThing.myName.setFirstName('Cat');
console.log(anyThing.myName);
console.log(anyThing.myName.firstName);
// 编译通过
let something;
something = 'seven';
something = 7;
// 等价于
let something: any;
something = 'seven';
something = 7;
let data = 'seven';
data = 7;
// Type 'number' is not assignable to type 'string'.
let data: string = 'seven';
data = 7;
// Type 'number' is not assignable to type 'string'.
let data;
data = 'seven';
data = 7;
// 编译通过
let data: string | number; // 允许 data 可以是 string 或 number 类型,但不能是其他类型
data = 'seven';
data = 7;
data = true;
// Type 'boolean' is not assignable to type 'string | number'.
function getLength(something: st
ring | number): number {
return something.length;
}
// length 不是 string 和 number 的共有属性,所以会报错
// Property 'length' does not exist on type 'string | number'.
// Property 'length' does not exist on type 'number'.
function getString(something: string | number): string {return something.toString();}
let data: string | number;
data = 'seven';
console.log(data.length); // 5
data = 7;
console.log(data.length); // 编译时报错
// Property 'length' does not exist on type 'number'.
interface Person { name: string; age: number;}let p1: Person = { name: 'Tom', age: 25};
interface Person {
name: string;
age: number;
}
let p1: Person = { // 缺少 age 属性
name: 'Tom'
};
// Type '{ name: string; }' is not assignable to type 'Person'.
// Property 'age' is missing in type '{ name: string; }'.
// -----------------------------------------------------------------
let p2 Person = { // 多余 gender 属性
name: 'Tom',
age: 25,
gender: 'male'
};
// Type '{ name: string; age: number; gender: string; }' is not assignable to type 'Person'.
// Object literal may only specify known properties, and 'gender' does not exist in type 'Person'.
interface Person {
name: string;
age?: number;
}
let p1: Person = { // 编译通过
name: 'Tom'
};
let p2: Person = { // 编译通过
name: 'Tom',
age: 25
};
let p3: Person = { // 报错(同上)
name: 'Tom',
age: 25,
gender: 'male'
};
interface Person {
name: string;
age?: number;
[propName: string]: any;
}
let p1: Person = {
name: 'Tom',
gender: 'male'
};
interface Person {
name: string;
age?: number;
[propName: string]: string;
}
let p1: Person = {
name: 'Tom',
age: 25,
gender: 'male'
};
// Property 'age' of type 'number' is not assignable to string index type 'string
// Type '{ name: string; age: number; gender: string; }' is not assignable to type 'Person'.
// Property 'age' is incompatible with index signature.
// Type 'number' is not assignable to type 'string'
interface Person {
name: string;
age?: number;
[propName: string]: string | number;
}
let p1: Person = { // 编译通过
name: 'Tom',
age: 25,
gender: 'male',
year:2021
};
interface Person {
readonly id: number;
name: string;
age?: number;
[propName: string]: any;
}
let p1: Person = {
id: 89757,
name: 'Tom',
gender: 'male'
};
p1.id = 9527;
// Cannot assign to 'id' because it is a read-only property.
interface Person {
readonly id: number;
name: string;
age?: number;
[propName: string]: any;
}
let p2: Person = { // 第一次给对象赋值
name: 'Tom',
gender: 'male'
};
p2.id = 89757;
// Property 'id' is missing in type '{ name: string; gender: string; }' but required in type 'Person' 对 p2 赋值时,没有给 id 赋值
// Cannot assign to 'id' because it is a read-only property. id 是只读属性
let arr: number[] = [1, 1, 2]; // 数组元素中不允许出现其他的类型
let arr1: number[] = [1, '1', 2]; // 报错:Type 'string' is not assignable to type 'number'.
let arr2: number[] = [1, 1, 2, 3, 5];
arr2.push('8');
//报错:Argument of type '"8"' is not assignable to parameter of type 'number'.
let arr3: Array<number> = [1, 1, 2, 3, 5];
interface NumberArray { [index: number]: number;}let arr: NumberArray = [1, 1, 2, 3, 5];
function sum() {
let args: number[] = arguments;
}
// 报错:Type 'IArguments' is missing the following properties from type 'number[]': pop, push, concat, join, and 24 more.
function sum() {let args: { [index: number]: number; length: number; callee: Function; } = arguments;}
function sum() {
let args: IArguments = arguments;
}
//其中 IArguments 是 TypeScript 中定义好了的类型,它实际上就是:
interface IArguments {
[index: number]: any;
length: number;
callee: Function;
}
let list: any[] = ['Echoyya', 25, { website: 'https://www.cnblogs.com/echoyya/' }, false];
联系客服