Language-tools: [TypeScript] Π’Π²ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, содСрТащСй ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² качСствС значСния

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 26 Π°Π²Π³. 2020  Β·  6ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: sveltejs/language-tools

ΠŸΡ€ΠΈ использовании TypeScript каТСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ.
НапримСр, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ввСсти Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для хранСния экзСмпляра ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

import AnyComponent from "./AnyComponent"

const componentStore = writable<SvelteComponent>(null)

$componentStore = AnyComponent

ПослСдняя строка выдаст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 'typeof \

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ упустил ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π½ΠΎ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ шаблон.

Π’ΠΎΡ‚ сообщСниС StackOverflow, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π΄ написаниСм этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π³Π΄Π΅ @dummdidumm проинструктировал мСня ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π― надСюсь, Ρ‡Ρ‚ΠΎ всС Π² порядкС.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚
Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… свойств / ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² нашСм Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Svelte. Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ набираСтся Π½Π΅Π²Π΅Ρ€Π½ΠΎ, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ writable<typeof SvelteComponent> , ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹ ΡΡΡ‹Π»Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° экзСмпляр этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π° Π½Π΅ Π½Π° Ρ‚ΠΈΠΏ класса.

ВсС 6 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚
Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… свойств / ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² нашСм Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Svelte. Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ набираСтся Π½Π΅Π²Π΅Ρ€Π½ΠΎ, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ writable<typeof SvelteComponent> , ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹ ΡΡΡ‹Π»Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° экзСмпляр этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π° Π½Π΅ Π½Π° Ρ‚ΠΈΠΏ класса.

Π― столкнулся с ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

import type { SvelteComponent } from 'svelte';
import Comp from './Comp.svelte';

const comp: SvelteComponent = Comp; // Type 'typeof SvelteComponentDev' is missing the following properties from type SvelteComponentDev: $set, $on, $destroy ...

ВСрсия 3.35.0

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ "typeof SvelteComponentDev", Π° Π½Π΅ SvelteComponentDev?

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Comp - это класс, Π° Π½Π΅ Π΅Π³ΠΎ экзСмпляр.

class Foo {
    bar: string;
}

class Comp extends Foo {}

const comp: Foo = new Comp(); // OK
const compClass1: Foo = Comp; // WRONG
const compClass2: typeof Foo = Comp; // OK

Ах. Π˜ΠΌΠ΅Π΅Ρ‚ смысл. Бпасибо.

Π‘ΡŒΡŽΡΡŒ с этим ΡƒΠΆΠ΅ 2 дня подряд. Π― просто Π½Π΅ понимаю:

<script lang="ts">
  import MyComponent from "./MyComponent.svelte";
  let myComponent: typeof MyComponent;
</script>

<MyComponent bind:this={myComponent}/> //Error here
Argument of type 'typeof MyComponent__SvelteComponent_' is not assignable to parameter of type 'MyComponent__SvelteComponent_'.   
Type 'typeof MyComponent__SvelteComponent_' is missing the following properties from type 'MyComponent__SvelteComponent_': $$prop_def, $$events_def, $$slot_def, $on, and 5 more.ts(2345)

Π§Ρ‚ΠΎ я здСсь дСлаю Π½Π΅ Ρ‚Π°ΠΊ? Π― просто Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ этот экзСмпляр Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. 😭

@ Alfagun74 ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ, отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π² этой Ρ‚Π΅ΠΌΠ΅. Π’Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ экзСмпляр класса. Π˜Ρ‚Π°ΠΊ, Π²Π°ΠΌ просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

<script lang="ts">
  import MyComponent from "./MyComponent.svelte";
  let myComponent: MyComponent;
</script>

<MyComponent bind:this={myComponent}/>

Π”Ρ€ΡƒΠ³ΠΈΠΌ Π½ΡƒΠΆΠ΅Π½ динамичСский ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, поэтому ΠΈΠΌ Π½ΡƒΠΆΠ΅Π½ сам класс, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ функция.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ