【TS】1092- TypeScript 相关问题(含解答)

2024-01-14 04:10

本文主要是介绍【TS】1092- TypeScript 相关问题(含解答),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1f50dc7a976c7bd25c2fad31312047d3.png

给出一大些面试题,然后不给答案。前端本来就卷,一些面试官看了文章后可能在自己都不知道答案的情况下,就跑去问面试者。我其实挺反感的这类文章的。

ts基础知识复习

juejin.cn/post/684490…[1]

😊 ts中的访问修饰符

  • public,任何地方

  • private,只能在类的内部访问

  • protected,能在类的内部访问和子类中访问

  • readonly,属性设置为只读

😊 const和readonly的区别

  1. const用于变量,readonly用于属性

  2. const在运行时检查,readonly在编译时检查

  3. 使用const变量保存的数组,可以使用push,pop等方法。但是如果使用ReadonlyArray<number>声明的数组不能使用push,pop等方法。

😊 枚举和常量枚举(const枚举)的区别

  1. 枚举会被编译时会编译成一个对象,可以被当作对象使用
  2. const枚举会在ts编译期间被删除,避免额外的性能开销
// 普通枚举
enum Witcher {Ciri = 'Queen',Geralt = 'Geralt of Rivia'
}
function getGeraltMessage(arg: {[key: string]: string}): string {return arg.Geralt
}
getGeraltMessage(Witcher) // Geralt of Rivia
复制代码
// const枚举
const enum Witcher {Ciri = 'Queen',Geralt = 'Geralt of Rivia'
}
const witchers: Witcher[] = [Witcher.Ciri, Witcher.Geralt]
// 编译后
// const witchers = ['Queen', 'Geralt of Rivia'
复制代码

😊 ts中interface可以给Function/Array/Class做声明吗?

// 函数类型
interface SearchFunc {(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {let result = source.search(subString);return result > -1;
}
复制代码
// Array
interface StringArray {[index: number]: string;
}let myArray: StringArray;
myArray = ["Bob", "Fred"];
复制代码
// Class, constructor存在于类的静态部分,所以不会检查
interface ClockInterface {currentTime: Date;setTime(d: Date);
}class Clock implements ClockInterface {currentTime: Date;setTime(d: Date) {this.currentTime = d;}constructor(h: number, m: number) { }
}
复制代码

ts中的this和js中的this有什么差异?

不了解

😊 ts中如何枚举联合类型的key?

type Name = { name: string }
type Age = { age: number }
type Union = Name | Agetype UnionKey<P> = P extends infer P ? keyof P : nevertype T = UnionKey<Union>
复制代码

😊 ts中 ?.、??、!.、_、** 等符号的含义?

  • ?. 可选链

  • ?? ?? 类似与短路或,??避免了一些意外情况0,NaN以及"",false被视为false值。只有undefind,null被视为false值。

  • !. 在变量名后添加!,可以断言排除undefined和null类型

  • _ , 声明该函数将被传递一个参数,但您并不关心它

  • ** 求幂

  • !:,待会分配这个变量,ts不要担心

// ??
let x = foo ?? bar();
// 等价于
let x = foo !== null && foo !== undefined ? foo : bar();// !.
let a: string | null | undefined
a.length // error
a!.length // ok
复制代码

😊 什么是抗变、双变、协变和逆变?

  • Covariant 协变,TS对象兼容性是协变,父类 <= 子类,是可以的。子类 <= 父类,错误。

  • Contravariant 逆变,禁用strictFunctionTypes编译,函数参数类型是逆变的,父类 <= 子类,是错误。子类 <= 父类,是可以的。

  • Bivariant 双向协变,函数参数的类型默认是双向协变的。父类 <= 子类,是可以的。子类 <= 父类,是可以的。

😊 ts中同名的interface或者同名的interface和class可以合并吗?

  1. interface会合并

  2. class不可以合并

😊 如何使ts项目引入并识别编译为js的npm库包?

  1. npm install @types/xxxx

  2. 自己添加描述文件

😊 ts如何自动生成库包的声明文件?

可以配置tsconfig.json文件中的declarationoutDir

  1. declaration: true, 将会自动生成声明文件

  2. outDir: '', 指定目录

😊 什么是泛型

泛型用来来创建可重用的组件,一个组件可以支持多种类型的数据。这样用户就可以以自己的数据类型来使用组件。简单的说,“泛型就是把类型当成参数”。

😊 -?,-readonly 是什么含义

用于删除修饰符

type A = {a: string;b: number;
}type B = {[K in keyof A]?: A[K]
}type C = {[K in keyof B]-?: B[K]
}type D = {readonly [K in keyof A]: A[K]
}type E = {-readonly [K in keyof A]: A[K]
}
复制代码

😊 TS是基于结构类型兼容

typescript的类型兼容是基于结构的,不是基于名义的。下面的代码在ts中是完全可以的,但在java等基于名义的语言则会抛错。

interface Named { name: string }
class Person {name: string
}
let p: Named
// ok
p = new Person()
复制代码

😊 const断言

const断言,typescript会为变量添加一个自身的字面量类型

  1. 对象字面量的属性,获得readonly的属性,成为只读属性
  2. 数组字面量成为readonly tuple只读元组
  3. 字面量类型不能被扩展(比如从hello类型到string类型)
// type '"hello"'
let x = "hello" as const
// type 'readonly [10, 20]'
let y = [10, 20] as const
// type '{ readonly text: "hello" }'
let z = { text: "hello" } as const
复制代码

😊 type 和 interface 的区别

  1. 类型别名可以为任何类型引入名称。例如基本类型,联合类型等

  2. 类型别名不支持继承

  3. 类型别名不会创建一个真正的名字

  4. 类型别名无法被实现(implements),而接口可以被派生类实现

  5. 类型别名重名时编译器会抛出错误,接口重名时会产生合并

😊 implements 与 extends 的区别

  • extends, 子类会继承父类的所有属性和方法。

  • implements,使用implements关键字的类将需要实现需要实现的类的所有属性和方法。

😊 枚举和 object 的区别

  1. 枚举可以通过枚举的名称,获取枚举的值。也可以通过枚举的值获取枚举的名称。

  2. object只能通过key获取value

  3. 数字枚举在不指定初始值的情况下,枚举值会从0开始递增。

  4. 虽然在运行时,枚举是一个真实存在的对象。但是使用keyof时的行为却和普通对象不一致。必须使用keyof typeof才可以获取枚举所有属性名。

😊 never, void 的区别

  • never,never表示永远不存在的类型。比如一个函数总是抛出错误,而没有返回值。或者一个函数内部有死循环,永远不会有返回值。函数的返回值就是never类型。

  • void, 没有显示的返回值的函数返回值为void类型。如果一个变量为void类型,只能赋予undefined或者null。

unknown, any的区别

unknown类型和any类型类似。与any类型不同的是。unknown类型可以接受任意类型赋值,但是unknown类型赋值给其他类型前,必须被断言

😊 如何在 window 扩展类型

declare global {interface Window {myCustomFn: () => void;}
}
复制代码

复杂的类型推导题目

🤔 implement UnionToIntersection

type A = UnionToIntersection<{a: string} | {b: string} | {c: string}> 
// {a: string} & {b: string} & {c: string}// 实现UnionToIntersection<T>
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never
// https://stackoverflow.com/questions/50374908/transform-union-type-to-intersection-type
// https://jkchao.github.io/typescript-book-chinese/tips/infer.html#%E4%B8%80%E4%BA%9B%E7%94%A8%E4%BE%8B
复制代码

😊 implement ToNumber

type A = ToNumber<'1'> // 1
type B = ToNumber<'40'> // 40
type C = ToNumber<'0'> // 0// 实现ToNumber
type ToNumber<T extends string, R extends any[] = []> =T extends `${R['length']}` ? R['length'] : ToNumber<T, [1, ...R]>;
复制代码

😊 implement Add<A, B>

type A = Add<1, 2> // 3
type B = Add<0, 0> // 0// 实现ADD
type NumberToArray<T, R extends any[]> = T extends R['length'] ? R : NumberToArray<T, [1, ...R]>
type Add<T, R> = [...NumberToArray<T, []>, ...NumberToArray<R, []>]['length']
复制代码

😊 implement SmallerThan<A, B>

type A = SmallerThan<0, 1> // true
type B = SmallerThan<1, 0> // false
type C = SmallerThan<10, 9> // false// 实现SmallerThan
type SmallerThan<N extends number, M extends number, L extends any[] = [], R extends any[] = []> = N extends L['length'] ? M extends R['length'] ? false : true:M extends R['length'] ? false : SmallerThan<N, M, [1, ...L], [1, ...R]>;
复制代码

😊 implement LargerThan<A, B>

type A = LargerThan<0, 1> // false
type B = LargerThan<1, 0> // true
type C = LargerThan<10, 9> // true// 实现LargerThan
type LargerThan<N extends number, M extends number, L extends any[] = [], R extends any[] = []> =N extends L['length'] ?false : M extends R['length'] ?true : LargerThan<N, M, [1, ...L], [1, ...R]>;
复制代码

😊 implement IsAny

type A = IsAny<string> // false
type B = IsAny<any> // true
type C = IsAny<unknown> // false
type D = IsAny<never> // false// 实现IsAny
type IsAny<T> = true extends (T extends never ? true : false) ?false extends (T extends never ? true : false) ?true:false:false;// 更简单的实现
type IsAny<T> = 0 extends (T & 1) ? true : false;
复制代码

😊 implement Filter<T, A>

type A = Filter<[1,'BFE', 2, true, 'dev'], number> // [1, 2]
type B = Filter<[1,'BFE', 2, true, 'dev'], string> // ['BFE', 'dev']
type C = Filter<[1,'BFE', 2, any, 'dev'], string> // ['BFE', any, 'dev']// 实现Filter
type Filter<T extends any[], A, N extends any[] = []> =T extends [infer P, ...infer Q] ?0 extends (P & 1) ? Filter<Q, A, [...N, P]> : P extends A ? Filter<Q, A, [...N, P]> : Filter<Q, A, N>: N;
复制代码

😊 implement TupleToString

type A = TupleToString<['a']> // 'a'
type B = TupleToString<['B', 'F', 'E']> // 'BFE'
type C = TupleToString<[]> // ''// 实现TupleToString
type TupleToString<T extends any[], S extends string = '', A extends any[] = []> =A['length'] extends T['length'] ? S : TupleToString<T, `${S}${T[A['length']]}`, [1, ...A]>
复制代码

😊 implement RepeatString<T, C>

type A = RepeatString<'a', 3> // 'aaa'
type B = RepeatString<'a', 0> // ''// 实现RepeatString
type RepeatString<T extends string, C extends number, S extends string = '', A extends any[] = []> =A['length'] extends C ? S : RepeatString<T, C, `${T}${S}`, [1, ...A]>
复制代码

😊 implement Push<T, I>

type A = Push<[1,2,3], 4> // [1,2,3,4]
type B = Push<[1], 2> // [1, 2]
type C = Push<[], string> // [string]// 实现Push
type Push<T extends any[], I> = T extends [...infer P] ? [...P, I] : [I]
复制代码

😊 implement Flat

type A = Flat<[1,2,3]> // [1,2,3]
type B = Flat<[1,[2,3], [4,[5,[6]]]]> // [1,2,3,4,5,6]
type C = Flat<[]> // []// 实现Flat
type Flat<T extends any[]> =T extends [infer P, ...infer Q] ?P extends any[] ? [...Flat<P>, ...Flat<Q>] : [P, ...Flat<Q>]: [];
复制代码

😊 implement Shift

type A = Shift<[1,2,3]> // [2,3]
type B = Shift<[1]> // []
type C = Shift<[]> // []// 实现Shift
type Shift<T extends any[]> = T extends [infer P, ...infer Q] ? [...Q] : [];
复制代码

😊 implement Repeat<T, C>

type A = Repeat<number, 3> // [number, number, number]
type B = Repeat<string, 2> // [string, string]
type C = Repeat<1, 1> // [1, 1]
type D = Repeat<0, 0> // []// 实现Repeat
type Repeat<T, C, R extends any[] = []> = R['length'] extends C ? R : Repeat<T, C, [...R, T]>
复制代码

😊 implement ReverseTuple

type A = ReverseTuple<[string, number, boolean]> // [boolean, number, string]
type B = ReverseTuple<[1,2,3]> // [3,2,1]
type C = ReverseTuple<[]> // []// 实现ReverseTuple
type ReverseTuple<T extends any[], A extends any[] = []> =T extends [...infer Q, infer P] ? A['length'] extends T['length'] ? A : ReverseTuple<Q, [...A, P]>: A;
复制代码

😊 implement UnwrapPromise

type A = UnwrapPromise<Promise<string>> // string
type B = UnwrapPromise<Promise<null>> // null
type C = UnwrapPromise<null> // Error// 实现UnwrapPromise
type UnwrapPromise<T> = T extends Promise<infer P> ? P : Error;
复制代码

😊 implement LengthOfString

type A = LengthOfString<'BFE.dev'> // 7
type B = LengthOfString<''> // 0// 实现LengthOfString
type LengthOfString<T extends string, A extends any[] = []> =T extends `${infer P}${infer Q}` ? LengthOfString<Q, [1, ...A]> : A['length']
复制代码

😊 implement StringToTuple

type A = StringToTuple<'BFE.dev'> // ['B', 'F', 'E', '.', 'd', 'e','v']
type B = StringToTuple<''> // []// 实现
type StringToTuple<T extends string, A extends any[] = []> =T extends `${infer K}${infer P}` ? StringToTuple<P, [...A, K]> : A;
复制代码

😊 implement LengthOfTuple

type A = LengthOfTuple<['B', 'F', 'E']> // 3
type B = LengthOfTuple<[]> // 0// 实现
type LengthOfTuple<T extends any[], R extends any[] = []> =R['length'] extends T['length'] ? R['length'] : LengthOfTuple<T, [...R, 1]>
复制代码

😊 implement LastItem

type A = LastItem<[string, number, boolean]> // boolean
type B = LastItem<['B', 'F', 'E']> // 'E'
type C = LastItem<[]> // never// 实现LastItem
type LastItem<T> = T extends [...infer P, infer Q] ? Q : never;
复制代码

😊 implement FirstItem

type A = FirstItem<[string, number, boolean]> // string
type B = FirstItem<['B', 'F', 'E']> // 'B'// 实现FirstItem
type FirstItem<T> = T extends [infer P, ...infer Q] ? P : never;
复制代码

😊 implement FirstChar

type A = FirstChar<'BFE'> // 'B'
type B = FirstChar<'dev'> // 'd'
type C = FirstChar<''> // never// 实现FirstChar
type FirstChar<T> = T extends `${infer P}${infer Q}` ? P : never;
复制代码

😊 implement Pick<T, K>

type Foo = {a: stringb: numberc: boolean
}type A = MyPick<Foo, 'a' | 'b'> // {a: string, b: number}
type B = MyPick<Foo, 'c'> // {c: boolean}
type C = MyPick<Foo, 'd'> // Error// 实现MyPick<T, K>
type MyPick<T, K extends keyof T> = {[Key in K]: T[Key]
}
复制代码

😊 implement Readonly

type Foo = {a: string
}const a:Foo = {a: 'BFE.dev',
}
a.a = 'bigfrontend.dev'
// OKconst b:MyReadonly<Foo> = {a: 'BFE.dev'
}
b.a = 'bigfrontend.dev'
// Error// 实现MyReadonly
type MyReadonly<T> = {readonly [K in keyof T]: T[K]
}
复制代码

😊 implement Record<K, V>

type Key = 'a' | 'b' | 'c'const a: Record<Key, string> = {a: 'BFE.dev',b: 'BFE.dev',c: 'BFE.dev'
}
a.a = 'bigfrontend.dev' // OK
a.b = 123 // Error
a.d = 'BFE.dev' // Errortype Foo = MyRecord<{a: string}, string> // Error// 实现MyRecord
type MyRecord<K extends number | string | symbol, V> = {[Key in K]: V
}
复制代码

🤔️ implement Exclude

type Foo = 'a' | 'b' | 'c'type A = MyExclude<Foo, 'a'> // 'b' | 'c'
type B = MyExclude<Foo, 'c'> // 'a' | 'b
type C = MyExclude<Foo, 'c' | 'd'>  // 'a' | 'b'
type D = MyExclude<Foo, 'a' | 'b' | 'c'>  // never// 实现 MyExclude<T, K>
type MyExclude<T, K> = T extends K ? never : T;
复制代码

🤔️ implement Extract<T, U>

type Foo = 'a' | 'b' | 'c'type A = MyExtract<Foo, 'a'> // 'a'
type B = MyExtract<Foo, 'a' | 'b'> // 'a' | 'b'
type C = MyExtract<Foo, 'b' | 'c' | 'd' | 'e'>  // 'b' | 'c'
type D = MyExtract<Foo, never>  // never// 实现MyExtract<T, U>
type MyExtract<T, U> = T extends U ? T : never
复制代码

😊 implement Omit<T, K>

type Foo = {a: stringb: numberc: boolean
}type A = MyOmit<Foo, 'a' | 'b'> // {c: boolean}
type B = MyOmit<Foo, 'c'> // {a: string, b: number}
type C = MyOmit<Foo, 'c' | 'd'> // {a: string, b: number}// 实现MyOmit
type MyOmit<T, K extends number | string | symbol> = {[Key in Exclude<keyof T, K>]: T[Key]
}type MyOmit<T, K extends number | string | symbol> = Pick<T, Exclude<keyof T, K>>
复制代码

😊 implement NonNullable

type Foo = 'a' | 'b' | null | undefinedtype A = MyNonNullable<Foo> // 'a' | 'b'// 实现NonNullable
type MyNonNullable<T> = T extends null | undefined ? never : T;
复制代码

😊 implement Parameters

type Foo = (a: string, b: number, c: boolean) => stringtype A = MyParameters<Foo> // [a:string, b: number, c:boolean]
type B = A[0] // string
type C = MyParameters<{a: string}> // Error// 实现MyParameters<T>
type MyParameters<T extends (...params: any[]) => any> =T extends (...params: [...infer P]) => any ? P : never
复制代码

😊 implement ConstructorParameters

class Foo {constructor (a: string, b: number, c: boolean) {}
}type C = MyConstructorParameters<typeof Foo> 
// [a: string, b: number, c: boolean]// 实现MyConstructorParameters<T>
type MyConstructorParameters<T extends new (...params: any[]) => any> =T extends new (...params: [...infer P]) => any ? P : never
复制代码

😊 implement ReturnType

type Foo = () => {a: string}type A = MyReturnType<Foo> // {a: string}// 实现MyReturnType<T>
type MyReturnType<T extends (...params: any[]) => any> =T extends (...params: any[]) => infer P ? P : never;
复制代码

😊 implement InstanceType

class Foo {}
type A = MyInstanceType<typeof Foo> // Foo
type B = MyInstanceType<() => string> // Error// 实现MyInstanceType<T>
type MyInstanceType<T extends new (...params: any[]) => any> =T extends new (...params: any[]) => infer P ? P : never;
复制代码

😊 implement ThisParameterType

function Foo(this: {a: string}) {}
function Bar() {}type A = MyThisParameterType<typeof Foo> // {a: string}
type B = MyThisParameterType<typeof Bar> // unknown// 实现MyThisParameterType<T>
type MyThisParameterType<T extends (this: any, ...params: any[]) => any> =T extends (this: infer P, ...params: any[]) => any ? P : unknown;
复制代码

😊 implement TupleToUnion

type Foo = [string, number, boolean]type Bar = TupleToUnion<Foo> // string | number | boolean// 实现TupleToUnion<T>
type TupleToUnion<T extends any[], R = T[0]> =T extends [infer P, ...infer Q] ? TupleToUnion<Q, R | P> : R;// 其他回答
type TupleToUnion<T extends any[]> = T[number]
复制代码

😊 implement Partial

type Foo = {a: stringb: numberc: boolean
}// below are all validconst a: MyPartial<Foo> = {}const b: MyPartial<Foo> = {a: 'BFE.dev'
}const c: MyPartial<Foo> = {b: 123
}const d: MyPartial<Foo> = {b: 123,c: true
}const e: MyPartial<Foo> = {a: 'BFE.dev',b: 123,c: true
}// 实现MyPartial<T>
type MyPartial<T> = {[K in keyof T]?: T[K]
}
复制代码

😊 Required

// all properties are optional
type Foo = {a?: stringb?: numberc?: boolean
}const a: MyRequired<Foo> = {}
// Errorconst b: MyRequired<Foo> = {a: 'BFE.dev'
}
// Errorconst c: MyRequired<Foo> = {b: 123
}
// Errorconst d: MyRequired<Foo> = {b: 123,c: true
}
// Errorconst e: MyRequired<Foo> = {a: 'BFE.dev',b: 123,c: true
}
// valid// 实现MyRequired<T>
type MyRequired<T> = {[K in keyof T]-?: T[K]
}
复制代码

😊 implement LastChar

type A = LastChar<'BFE'> // 'E'
type B = LastChar<'dev'> // 'v'
type C = LastChar<''> // never// 实现FirstChar<T>
type LastChar<T extends string, A extends string[] = []> =T extends `${infer P}${infer Q}` ?  LastChar<Q, [...A, P]> :A extends [...infer L, infer R] ? R : never
;
复制代码

😊 implement IsNever

// https://stackoverflow.com/questions/53984650/typescript-never-type-inconsistently-matched-in-conditional-type
// https://www.typescriptlang.org/docs/handbook/advanced-types.html#v
type A = IsNever<never> // true
type B = IsNever<string> // false
type C = IsNever<undefined> // false// 实现IsNever<T>
type IsNever<T> = [T] extends [never] ? true : false;
复制代码

😊 implement KeysToUnion

type A = KeyToUnion<{a: string;b: number;c: symbol;
}>
// 'a' | 'b' | 'c'// 实现KeyToUnion
type KeyToUnion<T> = {[K in keyof T]: K;
}[keyof T]
复制代码

😊 implement ValuesToUnion

type A = ValuesToUnion<{a: string;b: number;c: symbol;
}>
// string | number | symbol// ValuesToUnion
type ValuesToUnion<T> = T[keyof T]
复制代码

FindIndex<T, E>

bigfrontend.dev/zh/typescri…[2]

type IsAny<T> = 0 extends (T & 1) ? true : false;
type IsNever<T> = [T] extends [never] ? true : false;type TwoAny<A, B> = IsAny<A> extends IsAny<B> ? IsAny<A> : false;
type TwoNever<A, B> = IsNever<A> extends IsNever<B> ? IsNever<A> : false;type SingleAny<A, B> = IsAny<A> extends true ? true : IsAny<B>
type SingleNever<A, B> = IsNever<A> extends true ? true : IsNever<B>type FindIndex<T extends any[], E, A extends any[] = []> =T extends [infer P, ...infer Q] ?TwoAny<P, E> extends true ? A['length']:TwoNever<P, E> extends true ?A['length']:SingleAny<P, E> extends true ?FindIndex<Q, E, [1, ...A]>:SingleNever<P, E> extends true ?FindIndex<Q, E, [1, ...A]>:P extends E ? A['length'] : FindIndex<Q, E, [1, ...A]>: never
复制代码

implement Trim

type A = Trim<'    BFE.dev'> // 'BFE'
type B = Trim<' BFE. dev  '> // 'BFE. dev'
type C = Trim<'  BFE .   dev  '> // 'BFE .   dev'type StringToTuple<T extends string, A extends any[] = []> =T extends `${infer K}${infer P}` ? StringToTuple<P, [...A, K]> : A;type TupleToString<T extends any[], S extends string = '', A extends any[] = []> =A['length'] extends T['length'] ? S : TupleToString<T, `${S}${T[A['length']]}`, [1, ...A]>type Trim<T extends string, A extends any[] = StringToTuple<T>> =A extends [infer P, ...infer Q] ?P extends ' ' ?Trim<T, Q>:A extends [...infer M, infer N] ? N extends ' ' ?Trim<T, M>:TupleToString<A>:'':'';
复制代码

还有更多 UnionToTuple, IntersectionToUnion ?

关于本文

来源:dyhtps

https://juejin.cn/post/6988763249982308382

声明:文章著作权归作者所有,如有侵权,请联系小编删除。

3f2f07b5137ba6bb3b61f2a90c0a17f5.gif

1. JavaScript 重温系列(22篇全)

2. ECMAScript 重温系列(10篇全)

3. JavaScript设计模式 重温系列(9篇全)

4. 正则 / 框架 / 算法等 重温系列(16篇全)

5. Webpack4 入门(上)|| Webpack4 入门(下)

6. MobX 入门(上) ||  MobX 入门(下)

7. 120+篇原创系列汇总

8c15185ef39592d28f41ebdb380ed717.gif

回复“加群”与大佬们一起交流学习~

点击“阅读原文”查看 120+ 篇原创文章

这篇关于【TS】1092- TypeScript 相关问题(含解答)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603894

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚: