interface Point {
x: number;
y: number;
}interface Point {
x: number;
y?: number;
}interface Point {
readonly x: number;
y?: number;
}interface A {
[prop: string]: number;
}interface A {
[prop: string]: number;
a: boolean: // ❌ 编译错误
}interface A {
[prop: number]: string;
}
const arr: A = ["a", "b", "b"];interface A {
[prop: string]: number;
[prop: number]: string; // ❌
}
interface B {
[prop: string]: number;
[prop: number]: number; // ✅
}// 写法一
interface A {
fun(x: boolean): string;
}
// 写法二
interface A {
fun: (x: boolean) => string;
}
// 写法一
interface A {
fun(x: boolean): string;
}
// 写法三
interface C {
fun: { (x: boolean): string };
}const f = "f";
interface A {
[f](x: boolean): string;
}interface A {
f(): number;
f(x: boolean): boolean;
f(x: number, y: number): number;
}interface Sum {
(x: number, y: number): number;
}
const sum: Sum = (x, y) => x + y;interface ErrorConstructor {
new (message?: string): Error;
}interface Shape {
name: string;
}
interface Circle extends Shape {
radius: number;
}interface Style {
color: string;
}
interface Shape {
name: string;
}
interface Circle extends Style, Shape {
radius: number;
}interface Foo {
id: string;
}
interface Bar extends Foo {
id: number; // ❌ 错误
}interface Foo {
id: string;
}
interface Bar {
id: number;
}
// 报错
interface Baz extends Foo, Bar {
type: string;
}type Country = {
name: string;
capital: string;
};
interface CountryWithPop extends Country {
population: number;
}class A {
x: string = "";
y(): boolean {
return true;
}
}
interface B extends A {
z: number;
}
const b: B = {
x: "",
y: () => true,
z: 123,
};interface Box {
height: number;
width: number;
}
interface Box {
length: number;
}interface A {
a: number;
}
interface A {
a: string; // 报错
}interface Cloner {
clone(animal: Animal): Animal;
}
interface Cloner {
clone(animal: Sheep): Sheep;
}
interface Cloner {
clone(animal: Dog): Dog;
clone(animal: Cat): Cat;
}
// 等同于
interface Cloner {
clone(animal: Dog): Dog;
clone(animal: Cat): Cat;
clone(animal: Sheep): Sheep;
clone(animal: Animal): Animal;
}// 正确
interface Foo {
add(x: number): this;
}
// 报错
type Foo = {
add(x: number): this;
}// 正确
type MyString = string & {
type: 'new'
}
// 报错
interface MyString extends string {
}