์ด๊ฒ์ ์๋ ๋ ๊ฒ์ ๋๊น ์๋๋ฉด ๋ฒ๊ทธ์ ๋๊น?
๋๋ ๋ ๋ค ๋งํ์ง ์์ ๊ฒ์ ๋๋ค ... ๊ทธ๊ฒ์ ๋จ์ง ์๋ชป๋ ๊ตฌ๋ฌธ์ ๋๋ค ... try "var copy = typeof (this.data = {});"... ์ด๊ฒ์ ๋งํ ํ, ๋๋์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค ... ๊ทธ๊ฒ์ ํผ๋ ์ค๋ฝ์ต๋๋ค .. .
@giancarloa ํ , ๊ทธ ๊ดํธ๋ฅผ ์ถ๊ฐํ๋ฉด ์๋ฉ๋๋ค. ์์ ์ฝ๋๋ ํ๋ก๋์ ์ ์ฝ๋๊ฐ ์๋๋ผ ์ต์ํ์ ๋ฌธ์ ํธ๋ฆฌ๊ฑฐ ์ผ๋ฟ์ ๋๋ค. ์ด์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ์ํฉ์ด์์ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์์ this
๋ฅผ ๊ทธ ์ด์ธ์ ๊ฒ์ผ๋ก ๊ฐ์ ธ ๊ฐ๋ฉด ๊ด์ฐฎ์ ๊ฒ์ด๊ณ ์ค๋ฅ๊ฐ๋ณด๊ณ ๋์ง ์์ ๊ฒ์
๋๋ค. ์
class Test {
static data = {};
constructor() {
var copy: typeof Test.data = {};
}
}
์ฌ์์ ๋ฐ๋ผ
_TypeQueryExpression : _
_ ์๋ณ์ _
_TypeQueryExpression_.
_IdentifierName_
๊ทธ๋์ ์ด๊ฒ์ ์์๋ฉ๋๋ค.
ํ์ฉ๋์ง ์๋ ์ด์ ๋
function foo() {
var x: typeof this.x;
}
this
๋ ๋ง๊ฑฐ๋ ์ ์ ์ ํ์ด any
์ด๋ฏ๋ก ์๋ฒฝํ๊ฒ ์ ํจํฉ๋๋ค. ๋ฐ๋ผ์ ํด๋์ค์์๋ ์๋ฏธ๊ฐ์์ ์ ์์ง๋ง # 229๊ฐ ์์ผ๋ฉด ๋ค๋ฅธ ์ปจํ
์คํธ์์๋ ์๋ฏธ๊ฐ ์์ต๋๋ค.
@DanielRosenwasser OO ํ ... ์ฌ์ ์ ๋ฐ์ดํธ๋ฅผ ๊ณ ๋ คํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๋กค.
๊ณ ๋ คํด์ผ ํ ์ฌํญ์ ๋๋ค. ํ์์ด ๋น๊ณต๊ฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค.
self = this;
var x: typeof self.data;
์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๊ฐ์ฅ ๋จ์ํ ๊ฒฝ์ฐ๊ฐ ์ง์๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค
var a : typeof this.x = 1;
๊ทธ๋ฆฌ๊ณ ์ฌ๊ท ์ ์ ํ์ ๋ฉค๋ฒ๋ ์ค๋ฅ๋ก ์ด์ด์ ธ์ผํฉ๋๋ค.
๊ฐ์ฌ.
๋ฌธ๋ฒ์ ๋ฐ๊พผ๋ค๋ฉด ์ด๊ฒ์ด ํจ๊ณผ๊ฐ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@RyanCavanaugh ์ด์ง๋ง ๋ด๊ฐ ์ค ๋งฅ๋ฝ์์ ํ์ฉํ๋ ๊ฒ์ด ์ ์ ํฉ๋๊น? ๊ทธ๊ฒ์ ํ์ฐ์ ์ผ๋ก ์ฌ๋๋ค์ด ๊ทธ๋ ๊ฒํ๊ณ any
๋ฅผ ๊ทธ๋ค์ ์ ํ์ผ๋ก ์ป๋๋ก ์ด๋ ๊ฒ์
๋๋ค.
๊ตฌ๋ฌธ ์ ์ผ๋ก ์ ํํ๋ค๊ณ ํด์ ๊ทธ๊ฒ์ด ์ค์ ๋ก ์๋ฏธ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ต๋๋ค. IMO.
๊ทธ๋ฌ๋์ด ์์ธ์ ๋ํด ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
foo
์ ํ์ด any
์ธ typeof foo.bar
๋ฅผ ์ด๋ฏธ ์์ฑํ๋๋ก ํ์ฉํ์ผ๋ฉฐ ๋ค์ ์ ํ์ด ๋ค์๊ณผ ๊ฐ์ ๋ ๋ค๋ฅธ ์ ํํ ์์น์ ์ด๋ฏธ this.x
๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. this
์ any
์
๋๋ค. typeof this.x
์ ๊ต์ฐจ๋ก๊ฐ ์ ์์ธ๋ฅผ ์ธ์ ํด์ผํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด. ์ผ๋ง ์ ์ lodash์ ๋ํ ์ ํ ์ ์๋ฅผ ๋ง๋ค์๊ณ ์ง์๋๋ ์๋ช ์ค ์ผ๋ถ๋ ์ค์ ๋ก ๋ค๋ฅธ ๋ฉ์๋์ ๋ณ์นญ์ ๋๋ค. ๋๋ ๊ทธ๋ค์ ์ด๋ ๊ฒ ์ ์ธํ๋ค :
interface LoDashArrayWrapper<T> {
rest(): LoDashArrayWrapper<T>;
rest(
callback: ListIterator<T, boolean>,
thisArg?: any): LoDashArrayWrapper<T>;
rest(n: number): LoDashArrayWrapper<T>;
rest(pluckValue: string): LoDashArrayWrapper<T>;
rest(whereValue: {}): LoDashArrayWrapper<T>;
drop: typeof rest;
tail: typeof rest;
}
์ด๊ฒ์ ์ปดํ์ผ๋ฌ ๋ฒ์ 1.0์์ ์ ์๋ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ์ด์ ์ปดํ์ผ๋์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ํํํ๋ TypeQueryExpression์ ์๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ณ์นญ์ ๋ํ ์ ์ฒด ์๋ช ์งํฉ์ ๋ณต์ ํ๋ ๊ฒ ์ธ์ ๋ค๋ฅธ ์ต์ ์ด ํ์๋์ง ์์ต๋๋ค.
@juanevp ๊ธฐ๋ฅ ์ธํฐํ์ด์ค๋ ์ด๋ป์ต๋๊น?
interface LoDashArrayWrapper<T> {
rest: LoDashArrayWrapperOperation<T>;
drop: LoDashArrayWrapperOperation<T>;
tail: LoDashArrayWrapperOperation<T>;
}
interface LoDashArrayWrapperOperation<T> {
(): LoDashArrayWrapper<T>;
(
callback: ListIterator<T, boolean>,
thisArg?: any): LoDashArrayWrapper<T>;
(n: number): LoDashArrayWrapper<T>;
(pluckValue: string): LoDashArrayWrapper<T>;
(whereValue: {}): LoDashArrayWrapper<T>;
}
์น์ธ๋์์ต๋๋ค. ๋งค์ฐ ์ฝ๊ฒ ์์ ํด์ผํฉ๋๊น? ๊ทธ๋๋ ํ์ดํ ํจ์์์ _this = this
๋ฐฉ์ถ์ด ๋ฐ์ํ์ง ์๋์ง ํ์ธํ์ญ์์ค.
๊ด๋ จ์ด ์์ต๋๊น? ๋ค์๊ณผ ๊ฐ์ด [ts] Identifier expected.
๋ฅผ๋ฐ์ต๋๋ค.
class UserState {
<strong i="7">@observable</strong> state = {
name : "",
id : "",
};
<strong i="8">@action</strong>
changeUser(user: typeof this.state) { // Error is here
Object.assign(this.state, user);
}
}
export const userState = new UserState();
์์ ๊ฒฝ์ฐ this.state
๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด ์ ์ฉํฉ๋๋ค.
ํ ๋๋ ๋ฐฉ๊ธ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค :(
ํด๋์ค์์ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์์ ์ ํ์ด์ด์ผํ๋ ์ ํ ๋งค๊ฐ ๋ณ์๊ฐ์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ ์ํฉ๋๋ค.
thing = {
a: 1,
b: 2
};
multi: CMultiDataset<typeof this.thing>;
์ด ๊ฒฝ์ฐ ์ ์ ๋ณ์๋ก ๋ณ๊ฒฝํ๊ณ typeof ClassName.thing
๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๊ฐ ์ธ์คํด์ค๋ง๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ์ ํ์ง ์์ต๋๋ค. ๋ํ multi
๋ ํด๋์ค ๋ณ์ ์ฌ์ผํ๋ฏ๋ก ํด๋์ค ์ ์ธ์ ํด๋น ์ ํ์ ๊ฐ์ ธ์ผํฉ๋๋ค.
@RyanCavanaugh @DanielRosenwasser @mhegazy ๋ ๋น๊ต์ ์ฌ์ด ์์ ์ด๋ผ๊ณ ์๊ฐ๋๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ๊ทธ๋๋ ์๋ ์ ๊ฑธ์ณ ๊ด์ฌ์์ ๋ฒ์ด๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ตฌํ ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น?
@ sam-s4s ์์ฆ์๋ CMultiDataset<this["thing"]>
๋์ ์ธ ์์๊ฒ๋์์ต๋๋ค. ์ธ๋ฑ์ฑ ๋ ์ก์ธ์ค๋ typeof
์ ๋ฌ๋ฆฌ this
(๋คํ์ฑ, ์ง์)์ ํจ๊ป ์๋ํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค @weswigham- ๋ด๊ฐ CMultiDataset<ClassName['thing']>
ํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ ๋ฌธ์ ์์ ๋ฒ์ด๋ ์ ์์ต๋๋ค. :)
๊ทธ๋๋ ์๋ํ๋ this
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ์กฐํฉ๋ ์ฐพ์ ์ ์์ต๋๋ค ...
@ sam-s4s ์์ฆ์๋
CMultiDataset<this["thing"]>
๋์ ์ธ ์์๊ฒ๋์์ต๋๋ค. ์ธ๋ฑ์ฑ ๋ ์ก์ธ์ค๋typeof
์ ๋ฌ๋ฆฌthis
(๋คํ์ฑ, ์ง์)์ ํจ๊ป ์๋ํฉ๋๋ค.
๋ฐฉ๊ธ ์๋ํ์ง๋ง TypeScript 3.4.4์์๋ ์๋ํ์ง ์์ง๋ง @ sam-s4s์ ํ๋๋ ์๋ํฉ๋๋ค ( ClassName['thing']
). "ClassName"๋ง ์ฌ์ฉํ ์์๋ ๋์ this
๊ฐ ์๋ํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ๋ญ๊ฐ๊ฐ ์๋ค๋ฉด
```ํ์
์คํฌ๋ฆฝํธ
public groupByTypes = [ 'None', 'Foo', 'Bar'] as const;
public groupBy : typeof groupByTypes [number];
``
What is the proposed workaround? And I cannot make
groupByTypes` static
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฐฉ๊ธ ์๋ํ์ง๋ง TypeScript 3.4.4์์๋ ์๋ํ์ง ์์ง๋ง @ sam-s4s์ ํ๋๋ ์๋ํฉ๋๋ค (
ClassName['thing']
). "ClassName"๋ง ์ฌ์ฉํ ์์๋ ๋์this
๊ฐ ์๋ํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.