functionextend<T, U>(first: T, second: U): T & U{ let result = <T & U>{}; for (let id in first) { (<any>result)[id] = (<any>first)[id]; } for (let id in second) { if (!result.hasOwnProperty(id)) { (<any>result)[id] = (<any>second)[id]; } } return result; }
class Person { constructor(public name: string) { } } interface Loggable { log(): void; } class ConsoleLogger implements Loggable { log() { // ... } } var jim = extend(new Person("Jim"), new ConsoleLogger()); var n = jim.name; jim.log();
let someValue: any = "this is a string"; let strLength: number = (<string>someValue).length;
// 在JSX中,只能使用 as 语法断言。 let someValue: any = "this is a string"; let strLength: number = (someValue asstring).length;
let someValue: number = 123; let strLength: number = (someValue asstring).length; // Error: Conversion of type 'number' to type 'string' may be a mistake
let someValue: any = 123; let strLength: number = (someValue asstring).length; // OK
let someValue: any = [1, 2, 3]; let strLength: number = (someValue asstring).length; // OK